EDATE・EOMONTH関数の使い方|月単位の日付計算
EDATE関数とEOMONTH関数は、月単位の日付計算を行うExcelの関数です。EDATE関数は指定した月数後(または前)の日付を返し、EOMONTH関数は指定した月数後の月末日を返します。支払期日の計算、締め日の算出、契約更新日の管理など、ビジネスシーンで頻繁に使われます。
各関数の基本構文
EDATE関数
=EDATE(開始日, 月)
EOMONTH関数
=EOMONTH(開始日, 月)
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 開始日 | 基準となる日付 | 必須 |
| 月 | 加算する月数。正の値で将来、負の値で過去、0で当月 | 必須 |
EDATE関数とEOMONTH関数の違い
| 項目 | EDATE | EOMONTH |
|---|---|---|
| 返す日付 | 同じ日付(例: 15日 → 15日) | 月末日 |
| 用途 | 月単位での日付加算 | 月末日の取得 |
| 月末の扱い | 翌月に同じ日がなければ月末を返す | 常に月末を返す |
例として、2026/01/31を基準にした場合を見てみましょう。
=EDATE("2026/01/31", 1) ' 結果: 2026/02/28(2月31日は存在しないため月末)
=EOMONTH("2026/01/31", 1) ' 結果: 2026/02/28(2月の月末日)
実践例1:3ヶ月後の同日を求める
EDATE関数で基準日から3ヶ月後の日付を計算します。
=EDATE(A2, 3)
A2が「2026/06/15」の場合、結果は「2026/09/15」です。
6ヶ月前の日付を求める場合は、月に負の値を指定します。
=EDATE(A2, -6)
A2が「2026/06/15」の場合、結果は「2025/12/15」です。
実践例2:支払期日の計算(翌月末)
請求日から翌月末の支払期日を計算します。「月末締め翌月末払い」のパターンです。
=EOMONTH(A2, 1)
A2が「2026/06/15」の場合、結果は「2026/07/31」(翌月の月末日)です。
「月末締め翌々月末払い」の場合は月を2にします。
=EOMONTH(A2, 2)
結果は「2026/08/31」です。
実践例3:当月の初日と末日を求める
EOMONTH関数を使って当月の初日と末日を計算します。
当月末日を求める場合は次のようにします。
=EOMONTH(A2, 0)
月に0を指定すると、A2と同じ月の末日が返されます。A2が「2026/06/15」の場合、「2026/06/30」です。
当月初日を求める場合は、前月末日の翌日を計算します。
=EOMONTH(A2, -1) + 1
前月末日に1を足すことで当月1日が得られます。結果は「2026/06/01」です。
実践例4:契約更新日の一覧を作成
1年間の契約更新日を月ごとに生成します。A2に契約開始日が入っている場合、各月の更新日を計算します。
=EDATE(A2, 1) ' 1ヶ月後
=EDATE(A2, 2) ' 2ヶ月後
=EDATE(A2, 3) ' 3ヶ月後
...
=EDATE(A2, 12) ' 12ヶ月後(1年後)
ROW関数と組み合わせると、連番で月を指定できます。
=EDATE($A$2, ROW() - 2)
この数式を下にコピーすると、行番号に応じて月が増加します。
実践例5:四半期末日の計算
決算期末日を基準に各四半期の末日を求めます。
=EOMONTH($A$2, 3) ' 第1四半期末
=EOMONTH($A$2, 6) ' 第2四半期末
=EOMONTH($A$2, 9) ' 第3四半期末
=EOMONTH($A$2, 12) ' 第4四半期末(期末)
A2が「2026/03/31」(3月決算)の場合、各四半期末は6/30、9/30、12/31、翌年3/31になります。
よくあるエラーと対処法
#VALUE!エラー
開始日が有効な日付でない場合に発生します。以下を確認してください。
- セルの値が日付として認識されているか
- 文字列として入力された日付ではないか(書式を確認)
- 日付のシリアル値が正の値か
# 文字列の日付をDATEVALUE関数で変換
=EDATE(DATEVALUE(A2), 3)
#NUM!エラー
計算結果が負のシリアル値になる場合に発生します。たとえば、1900年以前の日付は扱えません。
月末日の繰り越し
EDATE関数は、元の日付と同じ日が存在しない場合に月末を返します。
=EDATE("2026/01/31", 1) ' → 2026/02/28(28日までしかない)
=EDATE("2026/01/31", 3) ' → 2026/04/30(30日までしかない)
=EDATE("2026/01/31", 4) ' → 2026/05/31(31日がある)
この動作は意図した通りの場合もありますが、「毎月同じ日付」が必要な場合は注意が必要です。
実務での活用パターン
月末締めの処理
# 今月の締め日(月末)
=EOMONTH(TODAY(), 0)
# 先月の締め日
=EOMONTH(TODAY(), -1)
# 来月の締め日
=EOMONTH(TODAY(), 1)
n営業日後の日付
EDATE/EOMONTH関数は暦日ベースで計算します。営業日ベースで計算したい場合は、WORKDAY関数を使用してください。
月数の計算
EDATE関数の逆算、つまり2つの日付間の月数を求めるにはDATEDIF関数を使います。
=DATEDIF(A2, B2, "M")
Google スプレッドシートでの互換性
EDATE関数とEOMONTH関数はGoogle スプレッドシートでも同じ構文で利用できます。月末日の扱いや引数の仕様もExcelと同一です。
まとめ
EDATE関数とEOMONTH関数は月単位の日付計算に特化した関数です。
- EDATE関数は指定した月数後の同日を返す
- EOMONTH関数は指定した月数後の月末日を返す
- 負の値を指定すると過去の日付を求められる
- 0を指定すると当月の処理ができる
- 月末日が存在しない場合は自動的に調整される
支払期日、締め日、契約更新日など、月単位の日付計算はビジネスの基本です。この2つの関数を使いこなして、効率的な日程管理を実現しましょう。