電子書籍の厳選無料作品が豊富!

少し前にもDATEDIF関数の事で質問を出したのですが、
その作業中のことです。

開始日から終了日までの、期間月数を出すため、

=DATEDIF(N40-DAY(N40),DATE(YEAR(N41),MONTH(N41)+1,0),"M")

という数式を入れています。
(N40が開始年月・N41が終了年月です)
年月のみの入力なので、開始年月は日を相殺し、終了年月はその月末を出すようにしてます。

で、大抵の値では上手くいくのですが、

開始年月 2000/9
終了年月 2004/4

の時だけ上手くいきません。
本当は「44」という値が欲しいのに、「43」になります。

どうやら終了年月が絡んでいるっぽいのですが、何が悪いのかが分かりません。

分かる方がいらっしゃったら教えて下さい。

A 回答 (4件)

式中の


N40-DAY(N40)

DATE(YEAR(N41),MONTH(N41)+1,0)
は、日にゼロを指定している為、日付シリアル値は「開始年月の前月の末日」と「終了年月の末日」になります。

DATEDIFの単位に"M"を指定した場合に返される値は「満月数」ですから「開始年月の前月が大の月」かつ「終了年月が小の月」の場合、日数が「満一ヶ月に1日足りない日数」になります。

開始年月 2000/9
終了年月 2004/4
の場合、
2000/9の前月の2000/8が31日までの大の月
2004/4が30日までの小の月
になりますから、これは「43ヶ月と30日」で、満43月と計算されます。

正しく計算するなら
「開始年月の1日(ついたち)」から「終了年月の1日(ついたち)」までの満月数+1
とすべきです。

以下の式が正しい式です。
=DATEDIF(DATE(YEAR(N40),MONTH(N40),1),DATE(YEAR(N41),MONTH(N41),1),"M")+1

日付を正確に計算したいなら、
DATE(YEAR(N41),MONTH(N41)+1,0)
のような「12月だったらDATEに指定した月が13月になる」とか「0日」とか、年や月を跨ぐ計算を排除すべきです。年や月を跨ぐと期待しない結果になりますので。
    • good
    • 0
この回答へのお礼

そうだったんですねー。30日だと満月数にカウントしてくれないんですね(T_T)
勉強になりました。これから気をつけて使わねば…です。

お礼日時:2004/04/27 13:54

こんにちは。

maruru01です。

開始と終了を含む期間延べ月数を求めるなら、DATEDIF関数を使用しなくても出来ます。

=(YEAR(N41)-YEAR(AN40))*12+MONTH(N41)-MONTH(N40)+1
    • good
    • 1
この回答へのお礼

ホントだ!!!このままコピペして使わせて頂きました。私がちょっと難しく考えすぎてたんでしょうか。有難うございました!

お礼日時:2004/04/27 13:56

1日はどの月でも固定ですが末日は28~31まで変化します。


N40-DAY(N40)は、開始日の前月末日
DATE(YEAR(N41),MONTH(N41)+1,0)は終了日の月末日
=DATEDIF(N40-DAY(N40),DATE(YEAR(N41),MONTH(N41)+1,0),"M")
=DATEDIF("2000/8/31","2004/4/30","M")
=(2004-2000)*12+(4-8)-(30<31)*1
=4*12-4-1=43

1日で比較すれば
=DATEDIF(N40-DAY(N40)+1,DATE(YEAR(N41),MONTH(N41)+1,1),"M")
=DATEDIF("2000/9/1","2004/5/1","M")
=(2004-2000)*12+(5-9)-(1<1)*1
=4*12-4-0=44
となります。
=DATEDIF(N40-DAY(N40)+1,N41-DAY(N41)+1,"M")+1
でも同様の結果になります。
    • good
    • 0
この回答へのお礼

早速のお返事、有難うございました。
実際の数値に置き換えて式を考えた事がなかったので、
とても参考になりました。

お礼日時:2004/04/27 13:52

開始年月 2000/9


終了年月 2004/4

なら、3年(=36ヶ月)と7ヶ月で「43」で合ってませんか?
    • good
    • 0

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