スプレッドシートのEDATE関数の使い方|Nヶ月後の日付を自動計算

スポンサーリンク

「契約開始日から3ヶ月後の満了日を出したい」「定期点検の次回日程をまとめて計算したい」――日付に月数を足す作業、手計算でやっていませんか?

月によって日数がバラバラなので、3ヶ月後が何月何日になるか意外と迷いますよね。2月を挟むとさらにややこしくなります。

そんなときに使いたいのがスプレッドシートのEDATE関数です。開始日と月数を指定するだけで、Nヶ月後・Nヶ月前の日付を正確に返してくれます。

この記事では基本の書き方から、契約管理・定期点検などの実務活用例、EOMONTH・DATE関数との使い分けまで紹介します。

スプレッドシートのEDATE関数とは?Nヶ月後の日付を返す関数

EDATE関数(読み方: イーデイト関数)は、指定した日付からNヶ月後(またはNヶ月前)の日付を返す関数です。

名前は英語の「Extended DATE(拡張された日付)」の略です。

たとえば「2026/1/15」の3ヶ月後を求めると「2026/4/15」が返ります。月数にマイナス値を指定すれば過去の日付も取得できます。

EDATE関数でできることをまとめると、次のとおりです。

  • 基準日からNヶ月後の同日を自動計算する
  • マイナス値でNヶ月前の日付も取得できる
  • 月末日が存在しない場合は自動で月末に調整される
  • TODAY関数と組み合わせて「今日からN ヶ月後」を動的に計算する

NOTE

EDATE関数はGoogleスプレッドシートの全バージョンで使えます。Excelでも同じ構文で動作するので、ファイル共有時も安心です。

EDATE関数の基本の書き方

構文と引数

=EDATE(開始日, 月数)

カッコの中に「開始日」と「月数」を入れるだけです。引数は2つとも必須です。

引数の詳細

引数必須/任意説明
開始日必須基準となる日付(セル参照や日付値)
月数必須加算する月数(正の値で未来、負の値で過去)

月数には整数を指定します。小数を入れた場合は小数部が切り捨てられます。たとえば「2.7」を指定すると「2」として扱われます。

EDATE関数の基本的な使い方

もっともシンプルな使い方です。A1に「2026/1/15」が入っているとします。

=EDATE(A1, 3)

結果は「2026/4/15」です。1月15日の3ヶ月後なので、4月15日が返ります。

マイナス値を指定すれば過去の日付も取得できます。

=EDATE(A1, -2)

結果は「2025/11/15」です。2ヶ月前の日付が返りますよ。

TODAY関数と組み合わせれば「今日から6ヶ月後」も簡単です。

=EDATE(TODAY(), 6)

スプレッドシートを開くたびに自動で更新されます。契約期限のアラート管理に便利ですよ。

実務で使えるEDATE関数の活用例3選

契約開始日から満了日を自動計算する

契約管理でもっとも多いパターンです。A列に契約開始日、B列に契約月数が入っているとします。

 A列(契約開始日)B列(契約月数)C列(満了日)
12026/1/153=EDATE(A1,B1) → 2026/4/15
22026/4/16=EDATE(A2,B2) → 2026/10/1
32026/7/1012=EDATE(A3,B3) → 2027/7/10

月数をセル参照にすれば、3ヶ月契約でも6ヶ月契約でも同じ数式で対応できます。

満了日の30日前にアラートを出す数式も組み合わせてみましょう。

=IF(EDATE(A1,B1)-TODAY()<=30, "更新確認", "")

IF関数(条件に応じて値を切り替える関数)で満了日と今日の差が30日以下になったら「更新確認」と表示します。

定期点検の次回日程を自動計算する

設備やシステムの定期点検スケジュールにも活用できます。A列に前回点検日、B列に点検間隔(月数)が入っているとします。

 A列(前回点検日)B列(間隔)C列(次回点検日)
12026/2/103=EDATE(A1,B1) → 2026/5/10
22026/3/16=EDATE(A2,B2) → 2026/9/1
32026/1/201=EDATE(A3,B3) → 2026/2/20

点検が完了したらA列を最新の日付に更新すれば、次回日程も自動で再計算されます。

Nヶ月前の日付を求める(月数にマイナス値)

「過去6ヶ月分のデータを抽出したい」ときに開始日を求められます。

=EDATE(TODAY(), -6)

今日が2026/3/19なら、結果は「2025/9/19」です。

FILTER関数(条件に合うデータだけを抽出する関数)と組み合わせると便利です。A列に日付、B列に売上が入っているとします。

=FILTER(A:B, A:A>=EDATE(TODAY(),-6))

直近6ヶ月分のデータだけが抽出されます。日付の境界が毎日自動で動くので、レポートの更新作業が不要になりますよ。

EDATE関数の月末日の自動調整を理解する

EDATE関数の重要な特徴が「月末日の自動調整」です。

開始日が1月31日で1ヶ月後を求める場合を見てみましょう。

=EDATE("2026/1/31", 1)

結果は「2026/2/28」です。2月には31日がないため、自動的に2月の末日(28日)に調整されます。

これがDATE関数との大きな違いです。同じ計算をDATE関数でやると結果が変わります。

=DATE(YEAR(A1), MONTH(A1)+1, DAY(A1))

A1が「2026/1/31」の場合、結果は「2026/3/3」です。2月31日は存在しないため、3日分が3月にロールオーバー(繰り越し)されます。

具体的な比較を見てみましょう。

開始日月数EDATE関数の結果DATE関数の結果
2026/1/31+12026/2/28(月末に調整)2026/3/3(ロールオーバー)
2026/1/31+22026/3/31(31日がある月はそのまま)2026/3/31(同じ結果)
2026/3/31+12026/4/30(月末に調整)2026/5/1(ロールオーバー)
2026/1/29+12026/2/28(月末に調整)2026/3/1(ロールオーバー)

月末日が絡む計算では、EDATE関数のほうが直感的な結果を返してくれます。「3月31日の1ヶ月後は4月30日」と解釈されるのは自然ですよね。

TIP

「月末日を必ず月末に維持したい」場合はEDATE関数、「厳密に同じ日付を保ちたい」場合はDATE関数と使い分けましょう。

EOMONTH関数との使い分け

EDATE関数とよくセットで紹介されるのがEOMONTH関数(読み方: イーオーマンス関数)です。

EOMONTH関数は「Nヶ月後の月末日」を返す関数です。構文はEDATE関数とほぼ同じです。

=EOMONTH(開始日, 月数)

両者の違いを比較表で整理しましょう。

項目EDATE関数EOMONTH関数
返す日付Nヶ月後の同日Nヶ月後の月末日
2026/1/15の2ヶ月後2026/3/152026/3/31
2026/1/31の1ヶ月後2026/2/28(月末に調整)2026/2/28(月末日)
主な用途契約満了日・次回点検日月末締め・支払期日
月末の扱い存在しない日は月末に調整常に月末日を返す

使い分けの目安はシンプルです。

  • 「Nヶ月後の同じ日」がほしい → EDATE関数
  • 「Nヶ月後の月末日」がほしい → EOMONTH関数

たとえば「毎月15日が支払日」ならEDATE関数、「毎月末が締め日」ならEOMONTH関数を選びます。

NOTE

当月の末日を求めるだけなら =EOMONTH(TODAY(), 0) が最も簡単です。DATE関数=DATE(YEAR(TODAY()), MONTH(TODAY())+1, 0) でも同じ結果が得られますが、EOMONTHのほうが数式がシンプルですよ。

EDATE関数のよくあるエラーと対処法

エラー原因対処法
#VALUE!開始日が日付として認識されていないセルの値が日付型か確認する。文字列の場合はDATEVALUE関数(日付文字列を日付値に変換する関数)で変換する
#VALUE!月数に数値以外が入っている月数のセルに文字列が混ざっていないか確認する
数字が表示される表示形式が「数値」になっているセルの表示形式を「日付」に変更する

開始日が文字列になっているとき

「2026/1/15」と手入力した値が文字列として認識されるケースがあります。セルの左上に小さな三角マークが出ていたら文字列の可能性があります。

=EDATE(DATEVALUE("2026/1/15"), 3)

DATEVALUE関数で文字列を日付値に変換すれば解決します。ただし最初からDATE関数で日付を作成するほうが確実です。

日付でなく数字が表示されるとき

EDATE関数の結果が「46112」のような数字で表示される場合は、セルの表示形式が「数値」になっています。

セルを選択して「表示形式」メニューから「日付」を選べば正しく表示されます。関数自体は正常に動作しているので安心してください。

まとめ

EDATE関数は、指定した日付からNヶ月後・Nヶ月前の日付を返す関数です。

ポイントを整理します。

  • 構文は =EDATE(開始日, 月数) の2引数。月数にマイナス値で過去の日付も取得できる
  • 月末日が存在しない場合は自動で月末に調整される(1/31の1ヶ月後は2/28)
  • 契約満了日・定期点検日・データ抽出期間の計算に最適
  • 「Nヶ月後の同日」はEDATE関数、「Nヶ月後の月末日」はEOMONTH関数
  • DATE関数はロールオーバーするため月末日の扱いに注意
  • DATEDIF関数は逆に「2つの日付の差を月数で計算する」ときに使う

まずは =EDATE(TODAY(), 3) で今日から3ヶ月後の日付を求めるところから試してみてください。

タイトルとURLをコピーしました