エクセル関数辞典 エクセル関数辞典

EDATE・EOMONTH関数の使い方|月単位の日付計算

EDATE EOMONTH 日付 月末 Excel関数
広告スペース (article-top)

EDATE関数とEOMONTH関数は、月単位の日付計算を行うExcelの関数です。EDATE関数は指定した月数後(または前)の日付を返し、EOMONTH関数は指定した月数後の月末日を返します。支払期日の計算、締め日の算出、契約更新日の管理など、ビジネスシーンで頻繁に使われます。

各関数の基本構文

EDATE関数

=EDATE(開始日, 月)

EOMONTH関数

=EOMONTH(開始日, 月)

引数の説明

引数説明必須/任意
開始日基準となる日付必須
加算する月数。正の値で将来、負の値で過去、0で当月必須

EDATE関数とEOMONTH関数の違い

項目EDATEEOMONTH
返す日付同じ日付(例: 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つの関数を使いこなして、効率的な日程管理を実現しましょう。

広告スペース (article-bottom)

あわせて読みたい