「契約開始日から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列(満了日) | |
|---|---|---|---|
| 1 | 2026/1/15 | 3 | =EDATE(A1,B1) → 2026/4/15 |
| 2 | 2026/4/1 | 6 | =EDATE(A2,B2) → 2026/10/1 |
| 3 | 2026/7/10 | 12 | =EDATE(A3,B3) → 2027/7/10 |
月数をセル参照にすれば、3ヶ月契約でも6ヶ月契約でも同じ数式で対応できます。
満了日の30日前にアラートを出す数式も組み合わせてみましょう。
=IF(EDATE(A1,B1)-TODAY()<=30, "更新確認", "")
IF関数(条件に応じて値を切り替える関数)で満了日と今日の差が30日以下になったら「更新確認」と表示します。
定期点検の次回日程を自動計算する
設備やシステムの定期点検スケジュールにも活用できます。A列に前回点検日、B列に点検間隔(月数)が入っているとします。
| A列(前回点検日) | B列(間隔) | C列(次回点検日) | |
|---|---|---|---|
| 1 | 2026/2/10 | 3 | =EDATE(A1,B1) → 2026/5/10 |
| 2 | 2026/3/1 | 6 | =EDATE(A2,B2) → 2026/9/1 |
| 3 | 2026/1/20 | 1 | =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 | +1 | 2026/2/28(月末に調整) | 2026/3/3(ロールオーバー) |
| 2026/1/31 | +2 | 2026/3/31(31日がある月はそのまま) | 2026/3/31(同じ結果) |
| 2026/3/31 | +1 | 2026/4/30(月末に調整) | 2026/5/1(ロールオーバー) |
| 2026/1/29 | +1 | 2026/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/15 | 2026/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ヶ月後の日付を求めるところから試してみてください。
