『2つの日の間の月数の計算方法について』(ぽん太)
以下の条件により、2つの日の間の月数を計算する関数を作ったのですが、
うまくいかない場合があります。修正方法を教えていただければ助かります。
【前提】
・契約期間のうち、指定日の属する年度の月数を計算したい。
・月数は各月を1月として計算し、端数も1月と計算する。
・年度は毎年4月1日〜翌年3月31日
【セル、関数等】
指定日:C3(手入力)
年度初日:C4(=DATE(YEAR(C3)-(MONTH(C3)<4),4,1))
年度末日:C5(=DATE(YEAR(C3)+(MONTH(C3)>=4),4,0))
契約開始日:C9(手入力)
契約満了日:D9(手入力)
契約期間中における年度初日:E9(=IF(C9="","",MAX(C9,$C$4)))
契約期間中における年度末日:F9(=IF(C9="","",MIN(D9,$C$5)))
★契約期間のうち、指定日の属する年度:H9(=IF(C9="","",(YEAR(F9)-YEAR(E9))*12+(MONTH(F9)-MONTH(E9))+1))
★の計算式で算出できると考えていますが、うまくいかない場合があります。
計算式に間違いがあるのか、他におすすめの計算式がある等、アドバイスいただければ助かります。
よろしくお願いします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
> うまくいかない場合があります。修正方法を教えていただければ助かります。 どんな場合にうまくいかないかキチンと書いて下さい。
(xyz) 2026/04/25(土) 06:58:40
具体的に書いてください。 >4月18日〜2月24日 のとき、想定結果は何で、実際の計算結果は何が帰ってくるのですか?
(xyz) 2026/04/25(土) 08:29:58
【セル、関数等】
指定日:C3(手入力)
年度初日:C4(=DATE(YEAR(EDATE(C3,-3)),4,1))
年度末日:C5(=DATE(YEAR(EDATE(C3,9)),3,31))
契約開始日:C9(手入力)
契約満了日:D9(手入力)
契約期間中における年度初日:E9(=IF(OR(C9="",C9<$C$4,C9>$C$5),"",EOMONTH(MAX(C9,$C$4),-1)+1))
契約期間中における年度末日:F9(=IF(E9="","",EOMONTH(MIN(D9,$C$5),0)))
★契約期間のうち、指定日の属する年度:H9(=IFERROR(DATEDIF(E9,F9,"M")+1,""))
【症状】
令和7年度(令和8年3月末)までの日付を契約開始日にしているとE、F列は表示されるが、
令和8年度(令和8年4月1日以降)の日付を入力するとE9、F9に数字が表示されなくなるため、
H9も数字が表示されない。お手数ですが、アドバイスいただければ助かります。
(ぽん太) 2026/04/25(土) 08:50:12
【入力内容と検証】
指定日 令和7年10月5日
契約開始日 令和5年10月20日
契約満了日 令和8年2月14日
E9の計算結果 令和7年4月1日(正しい)
F9の計算結果 令和8年2月14日(正しい)
G9の計算結果 27(間違っている → 正しくは29月)
H9の計算結果 11(正しい)
G9の計算式が間違っているのでしょうか。
併せて確認いただければ助かります。
(ぽん太) 2026/04/25(土) 08:58:40
症状のところは日付ではなく、文字列が入ってしまっているのではないかと思います。 質問内容がDATEDIFに変わってしまったので私はこれで失礼します。 別の関数なので、定義で求める両端の月未満を1月に切り上げる方法に使うのは適切ではないと思います。
他の回答者さんの回答をお待ちください。
# なお、質問にあたっては、回答者に伝わるような説明を心がけていただきたいと思います。
(xyz) 2026/04/25(土) 09:33:35
DATEDIF関数は、応当日が到来して「満」となります。
例えば 1/31〜2/28 だと1カ月も経っていない計算になります。 今回はそれを両端入れ(2ヶ月間)としたい訳なので 「開始日の前月末〜満了日の翌月初」で計算するのが安全です。
G9の数式で言うなら =IF(C9="","",DATEDIF(C9-DAY(C9),EOMONTH(D9,0)+1,"M")) とすることになります。
>E9(=IF(OR(C9="",C9<$C$4,C9>$C$5),"",EOMONTH(MAX(C9,$C$4),-1)+1))
↑
D9ですよね?
(半平太) 2026/04/25(土) 10:09:01
関数の数字間違っていたようで失礼しました。
Eは=IF(C10="","",MAX(C10,$C$5))という関数に修正してみました。
いろんなパターンを入力してみましたが、正しい数字になっていましたが、
こちらも関数としてはおかしくないでしょうか。
※C5は指定日の属する年度の初日(=DATE(YEAR(EDATE(C4,-3)),4,1))
が入力されています。
いろいろお聞きして申し訳ありません。
よろしくお願いします。
(ぽん太) 2026/04/25(土) 11:39:05
>※C5は指定日の属する年度の初日(=DATE(YEAR(EDATE(C4,-3)),4,1)) >が入力されています。
レイアウトが、1行下にズレましたか? そうだとして、 =IF(C10="","",MAX(C10,$C$5)) は問題ないと思います。
(半平太) 2026/04/25(土) 12:51:47
(ぽん太) 2026/04/25(土) 16:05:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.