スプレッドシートの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」が入っているとします。

01 data sample table
=EDATE(A1, 3)

!_images/spreadsheet-edate-function/02_formula_edate-basic.png

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

03 result edate basic

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

=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
04 result edate contract

月数をセル参照にすれば、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ヶ月分のデータだけが抽出されます。日付の境界が毎日自動で動くので、レポートの更新作業が不要になりますよ。

ARRAYFORMULA関数と組み合わせて複数行まとめて計算する

契約日や点検日が何十行も並んでいると、1行ずつEDATE関数をコピーするのは面倒ですよね。そんなときはARRAYFORMULA関数と組み合わせると便利です。

ARRAYFORMULA関数は、範囲を渡すだけで全行に同じ計算を一括適用してくれる関数です。1つの数式で列全体を処理できます。

A2からA10に契約開始日が入っていて、それぞれの3ヶ月後をC列にまとめて出す例です。

=ARRAYFORMULA(EDATE(A2:A10, 3))

C2に入力するだけで、A2〜A10の各日付から3ヶ月後の日付が一気に表示されます。行ごとに数式をコピーする必要はありません。

ただし、このままだとデータが入っていない空白行に「1900/1/3」のような変な日付が出てしまいます。空白セルをゼロ(つまり日付の起点)として計算してしまうためです。

そこでIF関数で空白を判定して回避します。

=ARRAYFORMULA(IF(A2:A="", "", EDATE(A2:A, 3)))

A列が空白の行は空白のまま、日付が入っている行だけ3ヶ月後を計算します。A2:A のように行番号を省略して列全体を指定すれば、後からデータを追加しても自動で計算されますよ。

月数もセル参照にしたいときは、月数の列を範囲で渡します。A列が開始日、B列が契約月数の場合です。

=ARRAYFORMULA(IF(A2:A="", "", EDATE(A2:A, B2:B)))

これで「3ヶ月契約は3ヶ月後、6ヶ月契約は6ヶ月後」と、行ごとに異なる月数でまとめて計算できます。契約一覧表の満了日を1つの数式で管理できるので、メンテナンスがぐっと楽になります。

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(ロールオーバー)
05 result edate monthend

月末日が絡む計算では、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のほうが数式がシンプルですよ。

WORKDAY関数との使い分け

「Nヶ月後」ではなく「N営業日後」を求めたいときは、EDATE関数ではなくWORKDAY関数を使います。

WORKDAY関数は、開始日から指定した営業日数(土日を除いた日数)だけ進んだ日付を返す関数です。構文は次のとおりです。

=WORKDAY(開始日, 日数, [休日])

EDATE関数とWORKDAY関数は、どちらも「未来の日付」を計算しますが、数える単位がまったく違います。EDATE関数はカレンダーの月単位、WORKDAY関数は土日を除いた営業日単位です。

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

項目EDATE関数WORKDAY関数
数える単位月数(カレンダー月)営業日数(日単位)
土日の扱い区別せず同日を返す土日をスキップする
祝日の考慮なし休日リストを指定可能
2026/1/15から+1ヶ月 → 2026/2/15+10営業日 → 2026/1/29
向いている用途契約満了日・定期更新・Nヶ月後の日付請求支払期限・納品日・検収期限

使い分けの基準は「月で数えるか、営業日で数えるか」のひと言に尽きます。

  • 「3ヶ月後」「半年後」など月単位で考える → EDATE関数
  • 「10営業日以内」「5営業日後」など営業日単位で考える → WORKDAY関数

たとえば「契約満了は6ヶ月後」ならEDATE関数、「請求書発行から10営業日以内に入金」ならWORKDAY関数が適しています。土日や祝日をまたぐ納期管理では、営業日で数えるWORKDAY関数のほうが実態に合いますよ。

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

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

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

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

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

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

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

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

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

EDATE関数に関するよくある質問

Q1. 結果が数値で表示される場合はどうすればよいですか?

セルの表示形式を「日付」に変更してください。EDATE関数は内部的に日付シリアル値(1900年からの通算日数)を返すため、セルが数値書式のままだと「46112」のような数字で表示されます。

セルを選択して「表示形式」メニューから「日付」を選べば、正しい日付表示に切り替わります。関数の計算結果は正常なので、見た目の問題だけですよ。

Q2. ExcelのEDATE関数と同じ構文で使えますか?

はい、まったく同じ構文で使えます。=EDATE(開始日, 月数) という書き方はExcelとGoogleスプレッドシートで完全に共通です。

月末日の自動調整など、動作仕様も同じです。ExcelファイルをGoogleスプレッドシートに取り込んでも、EDATE関数を含む数式はそのまま動作するので、ファイル共有時も安心してください。

Q3. 月数に小数を指定するとどうなりますか?

小数点以下が切り捨てられます。たとえば =EDATE(A1, 2.6)=EDATE(A1, 2) と同じ結果になり、2ヶ月後の日付が返ります。

「1.5ヶ月後」のような半月単位の計算はEDATE関数ではできません。日数で調整したい場合は、結果に日数を足す(例: =EDATE(A1,1)+15)といった工夫が必要です。

Q4. 年単位で加算するにはどうすればよいですか?

月数に12の倍数を指定します。1年は12ヶ月なので =EDATE(A1, 12) で1年後、=EDATE(A1, 24) で2年後、=EDATE(A1, 36) で3年後の日付が求められます。

「契約は2年更新」のような年単位の管理では、=EDATE(A1, 契約年数*12) のように年数に12を掛ける書き方にすると、セルに年数を入れるだけで計算できて便利ですよ。

Q5. 負の月数を使って過去の日付を求められますか?

求められます。月数にマイナス値を指定すると、その分だけ過去の日付が返ります。=EDATE(A1, -3) ならA1から3ヶ月前の日付です。

「3ヶ月前の月初から集計したい」「半年前のデータ開始日を出したい」といった過去基準の計算で活躍します。TODAY関数と組み合わせた =EDATE(TODAY(), -6) なら、常に「今日から半年前」を動的に求められますよ。

まとめ

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

ポイントを整理します。

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

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

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