アプリ版:「スタンプのみでお礼する」機能のリリースについて

7月25日(セルA1)から7月1日(セルB1)までの日数を計算する場合、B1-A1で日数は出てくるようなんですが、例えば月を跨いだ場合、誤差は出てくるのでしょうか?(閏年や、月ごとの総日数の違いなどにより)

日数計算の場合、DATEDIF関数というものもあるようなのですが、これを使うと日数がマイナスになってしまう場合、エラーになってしまうようです。

後者の方が正確であるならば、DATEDIF関数を使いたいんですが、その場合、引き算の結果がプラスになる場合、マイナスになる場合が混在しているデータで使用する場合、どのような計算式を入力すればよいのかが分かりません。

どなたか御存知の方、よろしくお願いします。
ちなみに、単なる引き算で誤差がでないようでしたら、引き算で処理したいと思っています。

A 回答 (6件)

用途によりますが、単純な日数計算なら基本的には誤差は出ないと思いますよ。


Excel内では、1900年1月1日を1として、1日ごとに1増える計算になっていますので。
ようするに、数字同士の引き算ですからね。

閏年は計算に入っていますし、月ごとの総日数も関係ないですし。

DATEDIFを使うなら、IF関数で大きさを比べて使ってみてはいかがでしょうか?
    • good
    • 2

#4 の私の書いたものの修正します。



すでに、ご指摘がありますが、以下の文言は訂正いたします。

>いいえ、OSが、Winでしたら、1900年(1904年)以降、正しく表示します。

1900/3/1 以降からのシリアル値です。見落としていました。現行バージョン、旧バージョンを調べてみましたが、どちらも同じ1900/2/29が出てきますが、本来、その日はありません。

失礼しました。
    • good
    • 0

1900/2/29 という日付は存在しないのですが、1900年日付システムでは存在しますよね。


つまり、1900年日付システムでの日付シリアルを、「1900/1/1を 1 とする連番」と理解すると、実は 1900/2/29 以降は1日ずれている事になります。

つまり、1900/2/29 をまたぐ日数差の計算は1日ずれてしまいます。逆に言えば 1900/2/29 をまたがない限り日数差は引算で正確に計算できます。

皆それを承知の上で1900年日付システムを使っています。
    • good
    • 0

>B1-A1で日数は出てくるようなんですが、例えば月を跨いだ場合、誤差は出てくるのでしょうか?



いいえ、OSが、Winでしたら、1900年(1904年)以降、正しく表示します。

>単なる引き算で誤差がでないようでしたら、引き算で処理したいと思っています。
そのほうが、自然な考えだと思います。

ここでは、関係がありませんが、DateDif は、"MD", "YD" オプションはバグがありますから、気をつけて使ったほうがよいと思います。"D"なら、同じです。単に、シリアル値からの計算ですから、それなら、使わなくてよいですね。

バグについて、触れられていますが、

http://www.kenzo30.com/zuisou/hanasi3.htm#DATEDIF関数について

"MD", "YD" の計算は、いわゆる「祥月命日」までの計算ですが、英米でも同じ計算をするのか、ちょっと不思議に感じたりします。欧州では、みたことがありませんので、ないような気がします。いずれにしても、仕事では、ちょっと使えないオプションのひとつです。

マイナスになる場合
すでに解答が出ていますが、マイナスが出ないように、ABS() で括ればよいだけです。

これは、ワークシート関数のみに発生します。(VBAにも同様のものがありますが、そちらは、そのようなオプションはありません。)

MS側は、そのバグについて認識してきても、ずっと放置してきた問題のひとつです。
    • good
    • 0

=ABS((DATEDIF(A1,B1+2100,"d")) - 2100)



これでもOK!?
    • good
    • 0

こと日数に関する限り、上記は同じ結果です。


=ABS(A1-A2)
=IF(A1>A2,DATEDIF(A2,A1,"d"),DATEDIF(A1,A2,"d"))
=DATEDIF(MIN(A1,A2),MAX(A1,A2),"d")
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!