【Excel】EDATE関数で数か月後・数か月前の日付を求める方法

この記事は約5分で読めます。

今回は、ExcelのEDATE関数を使って、ある日付から指定した月数だけ進めた日付や戻した日付を求める方法を紹介します。

この記事は、Microsoft 365のExcel、およびExcel 2024/2021/2019などのデスクトップ版を前提にしています。EDATE関数自体はWeb版やMac版のExcelでも使えますが、メニュー名や表示の細部が異なる場合があります。

EDATE関数でできること

「契約開始日から3か月後」「納品日の1か月前」「申込日から半年後の更新日」など、月単位で日付を計算したい場面は多くあります。日付に30を足す方法では、月によって日数が違うため、正しい日付にならないことがあります。

EDATE関数を使えば、開始日と月数を指定するだけで、同じ日にちの数か月後・数か月前の日付を返してくれます。月ごとの日数の違いを自分で考える必要がありません。

EDATE関数の書式

書式は次のとおりです。

  • =EDATE(開始日, 月)
  • 開始日:基準になる日付(セル参照やDATE関数で指定する)
  • 月:開始日から何か月後、または何か月前かを表す数値

月に正の数を指定すると未来の日付、負の数を指定すると過去の日付になります。

EDATE関数の基本的な使い方

数か月後の日付を求める

セルA2に「2026/1/15」と入力されているとします。1か月後の日付を求めるには、別のセルに次のように入力します。

  • =EDATE(A2,1) → 2026/2/15
  • =EDATE(A2,2) → 2026/3/15
  • =EDATE(A2,12) → 2027/1/15

月数に12を指定すれば1年後、24なら2年後というように、年単位の計算にもそのまま応用できます。

数か月前の日付を求める

月数にマイナスを付けると、過去の日付を求められます。

  • =EDATE(A2,-1) → 2025/12/15
  • =EDATE(A2,-6) → 2025/7/15

締め切りから逆算して「準備を始める日」を出したいときなどに使えます。

月数をセルで指定して表全体に使う

開始日をA列、加算したい月数をB列に入力しておき、C2に=EDATE(A2,B2)と入力してから下の行へコピーすると、行ごとに異なる月数で計算できます。月数を変えたいときはB列の値を書き換えるだけで済むため、数式を毎回直す手間が省けます。

EDATE関数を使うときの注意点

結果が数値で表示されたら表示形式を日付にする

Excelは日付を「シリアル値」と呼ばれる連続した数値で管理しています。そのため、EDATE関数の結果が「46068」のような数値で表示されることがあります。これは計算の誤りではなく、表示形式が日付になっていないだけです。

  1. 結果のセルを選択する
  2. [ホーム]タブの[数値の書式]の一覧から[短い日付形式]または[長い日付形式]を選ぶ

Ctrl+1で[セルの書式設定]を開き、[表示形式]タブの[日付]から好みの形式を選ぶ方法もあります。

開始日は日付として入力する

開始日に文字列の日付を使うと、思わぬ結果になる場合があります。開始日は日付として入力したセルを参照するか、DATE関数で指定するのが確実です。

  • セル参照の例:=EDATE(A2,3)
  • DATE関数の例:=EDATE(DATE(2026,4,1),3) → 2026/7/1

開始日が有効な日付として認識できない場合は、#VALUE!エラーが返されます。エラーが出たときは、開始日のセルが文字列になっていないか、余分なスペースが入っていないかを確認しましょう。

月数に小数を入れても切り捨てられる

月の引数に「1.5」のような小数を指定すると、小数部分は切り捨てられ、整数の月数として扱われます。半月後を求めたいといった用途には向かないため、その場合は日数を直接足すなど別の方法を検討してください。

月末の日付を扱うときの動き

開始日が月末に近い場合、移動先の月に同じ日にちが存在しないことがあります。たとえば「1月31日」の1か月後を求めると、2月31日は存在しないため、その月の最終日(2月28日、うるう年なら29日)が返されます。

一方、毎月の締め日として「常に月末日」を求めたい場合は、EDATE関数よりもEOMONTH関数が向いています。用途に応じて使い分けると、計算結果のずれを防げます。

EDATE関数の実務での活用例

契約や会員の更新日を一覧で管理する

開始日の列と期間(月数)の列を用意し、EDATE関数で更新日を自動計算すると、一覧表の管理が楽になります。期間を変更したときも、月数のセルを書き換えるだけで更新日が連動して変わります。

TODAY関数と組み合わせて期限を確認する

=EDATE(TODAY(),3)と入力すると、今日から3か月後の日付を常に表示できます。また、更新日の列に条件付き書式を設定し、「更新日が今日から1か月以内」の行に色を付けると、対応が近い項目を見落としにくくなります。

  • 条件付き書式の数式例:=AND(C2>=TODAY(),C2<=EDATE(TODAY(),1))

月ごとの予定表の日付を自動で並べる

最初のセルに開始日を入力し、その下のセルに「=EDATE(上のセル,1)」と入力して下へコピーすると、毎月同じ日にちの予定表を作れます。開始日を変えるだけで、表全体の日付がまとめて更新されます。

関数の挿入画面を使って引数を確認する

引数の順番に迷ったときは、数式バーの左にある[関数の挿入]ボタンからEDATEを選ぶと、開始日と月の入力欄が表示されます。各欄に入力した段階で結果のプレビューも確認できるため、慣れないうちはこちらを使うと入力ミスを減らせます。

まとめ

EDATE関数を使うと、月単位の日付計算を正確に行えます。ポイントを振り返ります。

  • 書式は=EDATE(開始日, 月)で、正の数なら未来、負の数なら過去の日付になる
  • 結果が数値で表示されたら、セルの表示形式を日付に変更する
  • 開始日はセル参照やDATE関数で指定し、文字列の日付は避ける
  • 月数の小数は切り捨てられ、存在しない日にちは移動先の月の最終日になる
  • 常に月末日を求めたい場合はEOMONTH関数と使い分ける

更新日や期限日の管理表を作る際に、EDATE関数を取り入れてみてください。