「契約の満了日を自動で出したい」「月末締めの支払日が月によってズレる」「有効期限の管理をExcelで完結させたい」——こうした日付の自動計算は、EDATE関数とEOMONTH関数の2つを押さえるだけで一気に解決できます。
EDATE関数は指定した月数を加減した日付を返し、EOMONTH関数は指定した月の月末日を返します。どちらもMOS Excel試験の「関数と数式」領域に含まれる頻出関数で、実務でも契約管理・締め日計算・更新日一覧の自動生成に欠かせません。本記事では基本構文から業務シナリオ別の応用まで、実際の数式例を交えて体系的に解説します。
「1年後の日付を出したら月がずれた」「月末日を=DATE(YEAR(),MONTH()+1,0)で出していたが毎回面倒」「MOS試験でEDATEの引数を間違えた」という方はぜひ最後までお読みください。
EDATE関数の基本構文と使い方
EDATE関数は開始日からN カ月後(またはN カ月前)の同じ日付を返します。「1年契約なので12カ月後の同日を満了日にしたい」という場面で使います。
EDATE関数の構文
=EDATE(開始日, 月)
| 引数 | 内容 | 入力例 |
|---|---|---|
| 開始日 | 起点となる日付。セル参照または日付シリアル値 | A2(2025/4/1 など) |
| 月 | 加算する月数。負の数で過去方向に遡れる | 12(1年後)、-3(3カ月前) |
戻り値は日付シリアル値のため、セルの書式を「日付」に設定する必要があります。書式が設定されていない場合は数値(例:46041)が表示されます。
EDATE関数の基本使用例
| 数式 | 意味 | 結果の例(A2=2025/4/1の場合) |
|---|---|---|
| =EDATE(A2,12) | 1年後の同日 | 2026/4/1 |
| =EDATE(A2,6) | 半年後の同日 | 2025/10/1 |
| =EDATE(A2,-1) | 1カ月前の同日 | 2025/3/1 |
| =EDATE(A2,0) | 同月同日(変化なし) | 2025/4/1 |
| =EDATE(A2,24) | 2年後の同日 | 2027/4/1 |
月末日をまたぐ場合の動作
EDATE関数は存在しない日付を自動的に月末日に調整します。たとえば1月31日の1カ月後は「2月31日」が存在しないため、2月28日(うるう年は29日)に丸められます。この自動調整は契約満了日計算では便利な一方、単純に「1カ月後の同日を返したい」用途では想定外の結果が出ることがあります。
| 開始日 | =EDATE(開始日, 1) | 備考 |
|---|---|---|
| 2025/1/31 | 2025/2/28 | 2月に31日はないため月末日に丸め |
| 2025/3/31 | 2025/4/30 | 4月に31日はないため30日に丸め |
| 2024/1/31 | 2024/2/29 | うるう年のため29日 |
| 2025/4/15 | 2025/5/15 | 15日は存在するためそのまま |
EOMONTH関数の基本構文と使い方
EOMONTH関数は指定した月の最終日(月末日)のシリアル値を返します。「毎月の締め日は月末」「次の月末を自動で出したい」という場面で活躍します。
EOMONTH関数の構文
=EOMONTH(開始日, 月)
| 引数 | 内容 | 入力例 |
|---|---|---|
| 開始日 | 起点となる日付。セル参照または日付シリアル値 | A2(2025/4/15 など) |
| 月 | 開始日から何カ月ずらした月の末日を返すか。0で同月末、1で翌月末、-1で前月末 | 0(同月末)、1(翌月末) |
EDATEと同様、戻り値は日付シリアル値のためセル書式を「日付」に設定します。
EOMONTH関数の基本使用例
| 数式 | 意味 | 結果の例(A2=2025/4/15の場合) |
|---|---|---|
| =EOMONTH(A2,0) | 同月の月末日 | 2025/4/30 |
| =EOMONTH(A2,1) | 翌月の月末日 | 2025/5/31 |
| =EOMONTH(A2,-1) | 前月の月末日 | 2025/3/31 |
| =EOMONTH(A2,2) | 2カ月後の月末日 | 2025/6/30 |
| =EOMONTH(TODAY(),0) | 今月の月末日 | 実行月によって自動変動 |
今月が何日まであるかを取得する
月末日を取得したあと、DAY関数と組み合わせると「今月は何日まであるか(月の日数)」を数値で取得できます。
=DAY(EOMONTH(TODAY(),0))
上の数式は今月の日数(28/29/30/31のいずれか)を返します。うるう年の2月かどうかを個別に判定するロジックを書く必要がなく、シンプルに月の日数を求められます。
実務シナリオ別の活用パターン
①契約満了日・更新日の自動計算
業務委託・賃貸借・保守契約など、「開始日から1年後の前日が満了日」というパターンが多く見られます。
| 計算したいもの | 数式 | 備考 |
|---|---|---|
| 1年契約の満了日(同日) | =EDATE(開始日,12) | 2025/4/1開始→2026/4/1満了 |
| 1年契約の満了日(前日) | =EDATE(開始日,12)-1 | 2025/4/1開始→2026/3/31満了 |
| 更新日(満了日の翌日) | =EDATE(開始日,12)+1 | 自動更新の新開始日 |
| 3年ごとの更新日 | =EDATE(開始日,B2*12) | B2に更新回数を入力すると可変対応 |
更新日の列にEDATE数式を入れておけば、開始日を入力するだけで満了日と更新日が自動で埋まる契約管理台帳を構築できます。
②試用期間・育児休業・猶予期間の終了日
「入社日から3カ月の試用期間の最終日」のように、「N カ月後の月末日」が終了日になるケースではEDATEとEOMONTHを組み合わせます。
数式例:=EOMONTH(EDATE(入社日,3),-1)
この数式は「入社日の3カ月後の月の前月末日」を返します。たとえば入社日が2025/4/10であれば、3カ月後は7月となり、その前月末は2025/6/30が試用期間の末日です。「N カ月後の末日まで」という表現を数式に落とし込む典型パターンです。
③月末締め・翌月末払いの支払日計算
「請求日の属する月の末日が締め日、翌月末が支払日」という条件の場合:
| 項目 | 数式 | 結果の例(請求日=2025/4/15) |
|---|---|---|
| 締め日(同月末) | =EOMONTH(請求日,0) | 2025/4/30 |
| 支払日(翌月末) | =EOMONTH(請求日,1) | 2025/5/31 |
| 支払日(翌々月末) | =EOMONTH(請求日,2) | 2025/6/30 |
| 15日締め翌月末払い | =EOMONTH(DATE(YEAR(請求日),MONTH(請求日)+(DAY(請求日)>15),0),0) | 15日以前は同月末、16日以降は翌月末 |
最後の行の数式は「15日締め翌月末払い」を一発で計算しています。DAY(請求日)>15がTRUE(1)になると月に1を加算し、翌月の月末日を返す仕組みです。
④有効期限一覧と期限切れアラートの自動化
資格証明書・ソフトウェアライセンス・保険証券など、有効期限の一覧管理では「残り日数」と「期限切れフラグ」を自動で表示させると実用的です。
| 項目 | 数式 | 備考 |
|---|---|---|
| 残り日数 | =EDATE(開始日,有効月数)-TODAY() | 負の値で期限切れ |
| 期限切れ判定 | =IF(EDATE(開始日,有効月数)| TODAY()と比較 | |
| 30日以内に期限切れ | =IF(EDATE(開始日,有効月数)-TODAY()<=30,"要更新","") | 条件付き書式と組み合わせると視認性アップ |
「残り日数」列に条件付き書式を設定し、30以下は黄色、0以下は赤色にすると、期限が迫った案件が一目で把握できます。
⑤財務・決算業務での月末日活用
毎月の売上集計では「今月の最終日」を動的に取得することで、集計範囲の終端を固定しなくて済みます。
数式例(今月分の売上合計):
=SUMIFS(売上列,日付列,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),日付列,"<="&EOMONTH(TODAY(),0))
この数式は「今月1日以上かつ今月末日以下」の売上を合計します。月が変わると自動的に集計期間が切り替わるため、毎月範囲を修正する手間がなくなります。
日付関数との組み合わせテクニック
| 組み合わせる関数 | 用途 | 数式例 |
|---|---|---|
| EDATE + TODAY | 今日から N カ月後の日付 | =EDATE(TODAY(),6) |
| EDATE + TEXT | 期限を「yyyy年m月d日」形式で表示 | =TEXT(EDATE(A2,12),"yyyy年m月d日") |
| EOMONTH + DAY | 今月の日数を取得 | =DAY(EOMONTH(TODAY(),0)) |
| EOMONTH + DATE | 月初め日(1日)を取得 | =EOMONTH(A2,-1)+1 |
| EDATE + DATEDIF | 開始日から満了日までの経過期間確認 | =DATEDIF(開始日,EDATE(開始日,12),"M") |
| EOMONTH + NETWORKDAYS | 当月の営業日数 | =NETWORKDAYS(EOMONTH(TODAY(),-1)+1,EOMONTH(TODAY(),0)) |
=EOMONTH(A2,-1)+1は「前月末の翌日」=「今月1日」を返します。月初めの日付を動的に取得する最短の数式で、月初から月末までの集計範囲に活用できます。
よくあるエラーと対処法
| エラー・症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 開始日引数に日付ではなくテキスト文字列が入っている | セルの書式を「日付」に変更するか、=DATEVALUE(A2)でシリアル値に変換する |
| #NUM! | 計算結果の日付が1900/1/1より前または9999/12/31より後になる | 月数の符号を確認する。過去方向に遡りすぎている可能性がある |
| 数値が表示される | セル書式が「標準」または「数値」になっている | セルを選択→「ホーム」→「数値」グループで書式を「短い日付」に変更 |
| 日付がずれている | 月末日をまたぐ自動丸め(1月31日+1カ月=2月28日) | 仕様として理解する。固定日が必要な場合はDATE関数で直接組み立てる |
| =EOMONTH(TODAY(),0)が変わらない | 自動計算がオフになっている | 「数式」タブ→「計算方法の設定」→「自動」を選択するか、F9キーで手動再計算 |
MOS Excel試験での頻出ポイント
MOS Excel 365&2019では、EDATE・EONMONTHは「関数と数式の活用」スキル領域に含まれます。試験問題では以下のパターンが頻出です。
- EDATE関数で指定月数後の日付を求める:引数の順序(開始日→月数)と、結果セルを「日付」書式に設定する手順まで含めて問われることがある
- EOMONTH関数で月末日を求める:月引数に0・1・-1を正確に使い分ける問題が出題される。「翌月末」は=EOMONTH(A2,1)であり、=EOMONTH(A2+1,0)との違いを理解しておくこと
- TODAY()との組み合わせ:「今日から6カ月後の日付」=EDATE(TODAY(),6)のように動的な日付計算を問う問題がある
- 書式設定のセット操作:関数を入力しただけで数値が表示される場合、書式を「日付」に変更する操作も採点対象になりうる
MOS試験対策チェックリスト
| 確認すべき操作 | 数式・手順 | 難易度 |
|---|---|---|
| EDATE関数の基本入力 | =EDATE(開始日,月数)を正確に入力できる | ★☆☆ |
| EOMONTH関数の基本入力 | =EOMONTH(開始日,0)で同月末、(1)で翌月末 | ★☆☆ |
| 結果セルを日付書式に変更 | 「ホーム」→数値グループ→「短い日付」を選択 | ★☆☆ |
| TODAY()との組み合わせ | =EDATE(TODAY(),N)・=EOMONTH(TODAY(),0) | ★★☆ |
| 月末日をまたぐ挙動の理解 | 1月31日+1カ月=2月28日に自動丸め | ★★☆ |
| IF関数との組み合わせ | =IF(EDATE(A2,12)<TODAY(),"期限切れ","有効") | ★★★ |
まとめ:EDATE・EONMONTHで日付計算の手作業をゼロにする
本記事のポイントをまとめます。
- EDATE関数:=EDATE(開始日,月)でN カ月後の同日を返す。満了日・更新日・有効期限の自動計算に最適
- EOMONTH関数:=EOMONTH(開始日,月)で指定月の末日を返す。月引数0で同月末、1で翌月末、-1で前月末
- 月末日をまたぐ丸め:1月31日+1カ月は2月28日(うるう年29日)に自動調整される仕様を把握しておく
- 契約管理台帳:開始日セルにEDATE数式を組み合わせるだけで、満了日・更新日・残り日数を自動更新できる
- 締め日・支払日:EOMONTH(請求日,0)で同月末締め、EOMONTH(請求日,1)で翌月末払いを瞬時に計算
- TODAY()との組み合わせ:EOMONTH(TODAY(),0)で今月末を動的取得でき、毎月の集計範囲を固定しなくて済む
- MOS試験:引数の順序・書式設定・TODAY()との組み合わせが頻出。月引数の0/1/-1を確実に使い分けられるよう練習する
EDATE・EOMONTH関数を使いこなせば、これまで手で日付を入力していた契約管理・支払管理・有効期限管理の作業が自動化されます。まず既存の管理表の「満了日」列にEDATE数式を入れることから始め、徐々に集計・アラート機能と組み合わせて業務全体の日付計算を自動化してください。
