契約期間の月数を数えるとき「当月をもって1ヶ月とみなしたい」と思ったことはありませんか?
DATEDIF関数だけで計算すると、日数ベースの「満月数」が返ります。開始日と終了日が同じ月の場合は「0ヶ月」になるため、実務の感覚と合わないケースが出てくるでしょう。
この記事では、EOMONTH関数を組み合わせて「当月=1ヶ月」で月数を求める数式の考え方をステップごとに解説していきます。
コピーしてすぐ使える完成形の数式も掲載しているので、ぜひ活用してみてください。
数式の完成形:DATEDIF×EOMONTHの月数集計
結論から示すと、「当月=1ヶ月」で月数を求める数式はこちらです。
A2に開始日、B2に終了日が入っている前提で使います。実際の計算結果を表で確認してみましょう。
| 開始日(A2) | 終了日(B2) | 数式の結果 | カウント対象月 |
|---|---|---|---|
| 4/10 | 4/25 | 1 | 4月のみ |
| 4/15 | 7/20 | 4 | 4月〜7月 |
| 1/5 | 3/28 | 3 | 1月〜3月 |
| 11/20 | 翌2/14 | 4 | 11月〜翌2月 |
開始日・終了日が月の途中でも、その月を丸ごと1ヶ月としてカウントしているのが分かります。年をまたぐ期間でも問題ありません。
次のセクションでは、なぜこの数式で正しく集計できるのかを解説していきます。
数式の解説:考え方とEOMONTH・DATEDIFの役割
この数式は、大きく3つのステップで動いています。まずは全体像を把握しておきましょう。
それぞれのステップを順番に見ていきましょう。
なぜEOMONTH関数を使うのか?
DATEDIF関数は、開始日から終了日までの「満月数」を返す関数です。満月数とは、開始日と同じ日付が翌月にくるたびに1ヶ月と数える仕組みのこと。
たとえば、4/15〜7/20をそのまま渡すと次のようになります。
- 4/15 → 5/15 で1ヶ月
- 5/15 → 6/15 で2ヶ月
- 6/15 → 7/15 で3ヶ月
- 7/15 → 7/20 は5日だけ → 1ヶ月未満
結果は「3」。しかし、4月・5月・6月・7月を1ヶ月ずつ数えたい場合は「4」にしたいですよね。
そこで、開始日を「月初」、終了日を「月末」に揃えてからDATEDIFに渡す方法をとります。この変換を担当するのがEOMONTH関数というわけです。
EOMONTH関数で月初・月末を求める
数式のなかでEOMONTH関数を2回使っています。それぞれの役割を見てみましょう。
■ 月初の求め方:EOMONTH(A2,-1)+1
- EOMONTH(A2,-1)は「A2の前月の末日」を返す
- そこに+1すると「A2の月の1日」になる
- 例:A2が4/15 → EOMONTH(4/15,-1) = 3/31 → +1 = 4/1
■ 月末の求め方:EOMONTH(B2,0)
- EOMONTH(B2,0)は「B2の当月の末日」を返す
- 例:B2が7/20 → EOMONTH(7/20,0) = 7/31
この変換により、開始日4/15は4/1に、終了日7/20は7/31になります。日付が「月単位のきれいな区間」に揃うイメージです。
DATEDIF関数で満月数を求め、+1する理由
変換後の月初・月末をDATEDIFに渡してみましょう。
=DATEDIF(4/1, 7/31, “M”) → 結果は「3」
DATEDIFは4/1→5/1で1、5/1→6/1で2、6/1→7/1で3とカウントします。7/1〜7/31は30日しかなく、次の「8/1」に届かないため1ヶ月にはなりません。
しかし実際は4月・5月・6月・7月の4ヶ月分を数えたいはず。月初から月末までの区間では、DATEDIFの結果が常に1ヶ月分少なくなります。
だからこそ、数式の末尾で+1して補正しているというわけです。
具体例で計算の流れを追う
ここまでの解説を踏まえ、2つのパターンで数式の動きを確認してみましょう。
同月内のケース(4/10〜4/25)
| 処理ステップ | 数式 | 結果 |
|---|---|---|
| 月初に変換 | EOMONTH(4/10,-1)+1 | 4/1 |
| 月末に変換 | EOMONTH(4/25,0) | 4/30 |
| 満月数を計算 | DATEDIF(4/1, 4/30, “M”) | 0 |
| +1で補正 | 0+1 | 1ヶ月 |
4月内で完結する期間でも、きちんと「1ヶ月」と返ります。DATEDIF単体なら「0」になるところを、EOMONTH+1の組み合わせで正しく補正できていることが分かるでしょう。
複数月にまたがるケース(4/15〜7/20)
| 処理ステップ | 数式 | 結果 |
|---|---|---|
| 月初に変換 | EOMONTH(4/15,-1)+1 | 4/1 |
| 月末に変換 | EOMONTH(7/20,0) | 7/31 |
| 満月数を計算 | DATEDIF(4/1, 7/31, “M”) | 3 |
| +1で補正 | 3+1 | 4ヶ月 |
4月〜7月の「4ヶ月」が正しく求まりました。月の途中の日付が入っていても、月単位で正確にカウントされています。
なお、数式がうまく動かない場合は、セルの書式が「日付」になっているか確認してみてください。文字列として入力されているとDATEDIF関数がエラーを返すことがあります。エラーが出た場合は、こちらの記事も参考になるかもしれません。
▶ Excel関数エラーの原因と直し方|#VALUE!・#REF!・#NAME?症状別逆引き
数式を入力したのに結果が反映されないときは、計算方法が「手動」になっている可能性があります。
▶ Excel数式が表示されるだけで計算されない原因と直し方【症状別逆引き】
Q&A【よくある疑問まとめ】
まとめ
この記事では、DATEDIF関数とEOMONTH関数を組み合わせて「当月=1ヶ月」で月数を求める数式を解説しました。
ポイントを振り返ると、次の3つになります。
- EOMONTH関数で開始日を「月初」、終了日を「月末」に変換する
- DATEDIF関数に月初・月末を渡して満月数を求める
- 月初〜月末の区間ではDATEDIFが常に1ヶ月少なくなるため、末尾で+1する
数式の完成形はこちらです。
=DATEDIF(EOMONTH(A2,-1)+1, EOMONTH(B2,0), “M”)+1
契約期間の集計やリース管理など、月単位のカウントが必要な業務でぜひ活用してみてください。