-PR-
締切り
済み

Excel97のDATEDIF関数について

  • 暇なときにでも
  • 質問No.21326
  • 閲覧数285
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 66% (2/3)

Excel97でDateDifを使って期間の一ヶ月未満の日数を出したいのですが、
=DATEDIF("1999/3/31","2000/3/1","md")
とすると答えは「-1」になってしまいます。
31日を"1999/3/30"に変えると「0」になります。
なぜこうなるのでしょうか。閏年の関係のようにも思えるのですが。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全3件)

  • 回答No.1
レベル13

ベストアンサー率 26% (511/1924)

Excelって日付の計算については、そのまま計算可能ですよ。 セルに ="2000/3/1"-"1999/3/31" と入力して、セルの書式設定でユーザ定義を選び種類にdって入れてみてください。単純に日数を出したい場合は数値として表示してください。 実際には内部でTimeSerial値として計算されています。小数点以上が日数で、小数点以下が時間を表してい ...続きを読む
Excelって日付の計算については、そのまま計算可能ですよ。
セルに
="2000/3/1"-"1999/3/31"
と入力して、セルの書式設定でユーザ定義を選び種類にdって入れてみてください。単純に日数を出したい場合は数値として表示してください。

実際には内部でTimeSerial値として計算されています。小数点以上が日数で、小数点以下が時間を表しています。
例えば 1.5 というのは、1日と12時間 を表します。
TimeSerialについてはヘルプにも記載されていますので一度読んでみてください。日付の計算がかなり柔軟にできることが判ると思います。
お礼コメント
nishi6

お礼率 66% (2/3)

早速、回答下さってありがとうございます。
説明不足でしたが、減算ではなくDateDifを使っているのは、減算を行なうと2つの日付が同日の場合、一ヶ月の日数が帰ってくるためです。同日の場合は「~ヶ月ちょうど」にしたい(帰ってくる答えは0日を期待)のですが・・・
投稿日時 - 2000-12-22 17:45:00


  • 回答No.2
レベル14

ベストアンサー率 54% (1069/1958)

"MD"を指定したときの返り値はややこしいですね。 =DATEDIF("1999/5/31","2000/5/1","md") では、「0」 =DATEDIF("1999/6/30","2000/6/1","md") では、「2」 =DATEDIF(" ...続きを読む
"MD"を指定したときの返り値はややこしいですね。
=DATEDIF("1999/5/31","2000/5/1","md") では、「0」
=DATEDIF("1999/6/30","2000/6/1","md") では、「2」
=DATEDIF("1999/8/31","2000/8/1","md") では、「1」
となります。
前月が小の月で30日までしかないときに、31日まで指定してあれば、「0」になり、(5月の例)
前月が大の月で31日まであるときに、30日まで指定すると「2」になり、(6月の例)
前月が大の月で31日まであるときに、31日まで指定すると「1」になる。(8月の例)
ようです。
これから見ると、
=DATEDIF("1999/3/30","2000/3/1","md") で「0」になるのは、2000年3月1日の前月が29日までであるところに、30日を指定すると、30日=1日ということで、「0」になるようです。31日にすれば1日追い越してしまうので、「-1」になるということでしょうか。
ちなみに、
=DATEDIF("1998/3/31","1999/3/1","md") は「-2」になります。
お礼コメント
nishi6

お礼率 66% (2/3)

細かく分析してくださってありがとうございます。12月は送別会や忘年会でPCを見る回数が少なくなってしまいます。
疑問なのは人間の「感覚」にあった日付のカウントがうまくできないからでしょうか。最初の日付の日<2つ目の日付の日の場合は余り抵抗なく結果が受け入れられます。出したい答えは'期間はY年M月D日です'ということですが、不等号が逆の場合は、最初の日付の月末までの日数+2つ目の日数を出すことになるのでしょうか?そうするとDateDif関数の機能に疑問が出てきてしまいます。私も引き続き調べて見ます。ありがとうございました。
投稿日時 - 2000-12-23 00:34:40
  • 回答No.3
レベル14

ベストアンサー率 54% (1069/1958)

Y年M月D日間を計算するなら、こんな式はどうでしょうか?   A       B 1 1999/3/31  2000/3/1 という表だとして、 =TRUNC(DATEDIF(A1,B1,"m")/12,0)&"年"&MOD(DATEDIF(A1,B1,"M"),12)&"月"& ...続きを読む
Y年M月D日間を計算するなら、こんな式はどうでしょうか?
  A       B
1 1999/3/31  2000/3/1
という表だとして、

=TRUNC(DATEDIF(A1,B1,"m")/12,0)&"年"&MOD(DATEDIF(A1,B1,"M"),12)&"月"&DAY(B1)&"日"

とすると「0年11月1日」となります。
セルA1が月末と限らなければ、

=TRUNC(DATEDIF(A1,B1,"m")/12,0)&"年"&MOD(DATEDIF(A1,B1,"M"),12)&"月"&DATEDIF(A1,DATE(YEAR(A1),MONTH(A1)+1,0),"d")+DAY(B1)&"日"

日数の計が月の日数を越える場合は、IF関数で条件付けをすることになりますが、長い間抜けな式になりそうなのでこの辺で。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ