[[20260424220732]] 『2つの日の間の月数の計算方法について』(ぽん太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『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日のように開始日、満了日のどちらか又は両方月の途中の日である場合、それぞれを1月ずつカウントしたいのに通算月と計算されているのか、総月数が正確に出ない時がありました。計算式が誤っているのかを見ていただきたいと思いまして。よろしくお願いします。
(ポン太) 2026/04/25(土) 08:19:39

 具体的に書いてください。
 >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


追加の症状です。
検証のため、契約総月数の関数を入れました。
総月数:G9(=IF(C9="","",DATEDIF(C9,D9,"M")))

【入力内容と検証】
指定日 令和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


半平太様
2つ目のデータチェックで1行下で検証してました。失礼しました。
確認いただき、ありがとうございます。
ものすごく助かりました。感謝です。

(ぽん太) 2026/04/25(土) 16:05:28


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.