エクセルで業務を行っていると、契約の満了日や支払期日など、特定の日付から数か月後、数年後の日付を自動的に計算したい場面がよくあります。
手作業でカレンダーを確認しながら日付を入力するのは効率的ではありませんし、計算ミスのリスクも高まるでしょう。
エクセルには、こうした将来の日付を簡単に求められる便利な関数が用意されています。特にEDATE関数とDATE関数を使いこなせば、3か月後や3年後といった月単位・年単位の日付計算を瞬時に行えます。
本記事では、エクセルで将来の日付を自動表示する複数の方法について、具体的な使用例とともに詳しく解説していきます。基本的な関数の使い方から実務での応用テクニックまで、幅広くカバーしていますので、ぜひ最後までご覧ください。
エクセルで3か月後や3年後の日付を求める基本的な方法
それではまず、エクセルで将来の日付を計算する基本的なアプローチについて解説していきます。
EDATE関数を使う方法
EDATE関数は、指定した日付から指定した月数だけ前後の日付を求める専用の関数です。
3か月後を求めたい場合は月数に「3」を、3年後なら「36」(3年×12か月)を指定するだけ。非常にシンプルで直感的に使えるため、月単位の日付計算では最も推奨される方法でしょう。
EDATE関数は月単位の日付計算に最適で、月末日も自動的に調整してくれる便利な関数です。
DATE関数を使う方法
DATE関数とYEAR・MONTH・DAY関数を組み合わせることでも、将来の日付を計算できます。
この方法はより柔軟な日付操作が可能で、年・月・日を個別に制御したい場合に有効です。たとえば「3年2か月15日後」のような複雑な計算も実現可能でしょう。
日付の直接計算による方法
エクセルでは日付をシリアル値として扱うため、単純な加減算でも日付計算が行えます。
ただし、この方法は日数単位の計算には適していますが、月数や年数の計算では月ごとの日数の違いを考慮する必要があり、やや複雑になります。月単位・年単位の計算には関数の使用がおすすめです。
EDATE関数で月単位の日付計算を行う詳しい手順
続いては、最も実用的なEDATE関数について詳しく確認していきます。
EDATE関数の基本構文と使い方
EDATE関数の基本的な書式は以下の通りです。
=EDATE(開始日, 月数)
開始日には基準となる日付を、月数には何か月後(または前)かを表す数値を指定します。
月数に正の数を指定すれば未来の日付、負の数を指定すれば過去の日付が求められるでしょう。たとえば、セルA1に「2024/1/15」という日付が入力されている場合、=EDATE(A1, 3)と入力すると「2024/4/15」が返されます。
開始日は直接日付を入力することもできますが、セル参照を使う方が実務では便利です。
3か月後の日付を求める具体例
実際の使用例を見ていきましょう。
| 契約開始日 | 3か月後 | 使用した数式 |
|---|---|---|
| 2024/1/15 | 2024/4/15 | =EDATE(A2, 3) |
| 2024/3/31 | 2024/6/30 | =EDATE(A3, 3) |
| 2024/11/30 | 2025/2/28 | =EDATE(A4, 3) |
上の表からわかるように、EDATE関数は月末日の調整も自動的に行ってくれます。
2024年3月31日の3か月後は本来7月31日ですが、6月には31日がないため6月30日に調整されています。また、11月30日の3か月後は2月28日(または29日)となり、月をまたぐ計算も正確に処理されるでしょう。
この自動調整機能により、複雑な条件分岐を記述する必要がありません。
3年後(36か月後)の日付を求める方法
年単位の計算もEDATE関数で簡単に実現できます。
=EDATE(A1, 36)
3年後の日付を求めたい場合、月数に36(3年×12か月)を指定すればOKです。
5年後なら60、10年後なら120という具合に、年数に12を掛けた値を月数として入力します。この方法なら、契約期間が複数年にわたる場合でも、満了日を一発で計算できるでしょう。
たとえば2024年4月1日の3年後は2027年4月1日と正確に計算されます。
DATE関数を組み合わせた将来の日付計算
続いては、より柔軟な日付操作が可能なDATE関数の活用法を確認していきます。
DATE関数の基本と日付計算への応用
DATE関数は年・月・日を個別に指定して日付を作成する関数です。
=DATE(年, 月, 日)
この関数の優れた点は、月や日に通常の範囲を超えた値を指定しても、自動的に適切な日付に変換してくれるところにあります。
たとえば=DATE(2024, 13, 1)と入力すると、13月は存在しないため自動的に2025年1月1日に変換されます。この特性を利用することで、複雑な日付計算が可能になるでしょう。
月数の加算が必要な場合、月の部分に計算式を組み込めば実現できます。
YEAR・MONTH・DAY関数との組み合わせ
既存の日付から将来の日付を計算するには、DATE関数とYEAR・MONTH・DAY関数を組み合わせます。
=DATE(YEAR(A1), MONTH(A1)+3, DAY(A1))
上記の数式では、セルA1の日付から年・月・日をそれぞれ取り出し、月に3を加算してから新しい日付を作成しています。
この方法なら、年と月を別々に加算することも可能です。たとえば3年2か月後なら「YEAR(A1)+3」「MONTH(A1)+2」とすればよいでしょう。
ただし、EDATE関数と比べると数式が長くなるため、単純な月数計算ではEDATE関数の方が効率的です。
複雑な日付計算の実例
DATE関数の真価が発揮されるのは、より複雑な条件が絡む場合でしょう。
| 計算内容 | 数式例 | 説明 |
|---|---|---|
| 3か月後の月初 | =DATE(YEAR(A1), MONTH(A1)+3, 1) | 日を1に固定 |
| 3年後の同じ曜日 | =DATE(YEAR(A1)+3, MONTH(A1), DAY(A1)) | 年のみ加算 |
| 翌月末日 | =DATE(YEAR(A1), MONTH(A1)+2, 0) | 日を0にすると前月末 |
特に日に0を指定すると前月の末日が取得できるというテクニックは覚えておくと便利です。
翌月末日を求めたい場合、月に2を加算して日を0にすれば、自動的に翌月の末日が計算されます。このようにDATE関数は、工夫次第で様々な日付計算に対応できるでしょう。
日付計算の便利な活用例と注意点
続いては、実務での具体的な活用シーンと押さえておくべき注意点を確認していきます。
支払期日や契約満了日の自動計算
ビジネスシーンで最も多い活用例が、各種期日の自動計算です。
契約開始日から自動的に満了日を算出することで、更新漏れを防げます。たとえば1年契約の場合、契約開始日のセルに対して=EDATE(A2, 12)と入力しておけば、契約満了日が常に最新の状態で表示されるでしょう。
また、月次の支払スケジュール管理にも活用できます。
請求書発行日から支払期日(例:翌月末)を自動計算する仕組みを作れば、入金管理の効率が大幅に向上します。
初回支払日を入力すれば、以降の支払予定日をすべて自動表示させることも可能です。
月末日を正確に求める方法
月末日の計算は意外と厄介なポイントでしょう。
月によって28日、29日、30日、31日と日数が異なるため、単純な日付加算では正確な月末日を求められません。しかしEOMONTH関数を使えば、指定月の月末日を簡単に取得できます。
=EOMONTH(開始日, 月数)
EDATE関数と似ていますが、こちらは必ず月末日を返すのが特徴です。
たとえば=EOMONTH(A1, 0)とすれば、A1の日付が含まれる月の末日が求められます。3か月後の月末日なら=EOMONTH(A1, 3)とすればよいでしょう。
支払期日を「翌月末」に設定している場合などに非常に便利な関数です。
日付計算でのエラーと対処法
日付計算で注意すべきエラーパターンをいくつか紹介します。
まず、#VALUE!エラーが表示される場合、多くは開始日のセルに日付として認識されないデータが入っているケースです。文字列形式で日付が入力されていないか確認しましょう。
また、計算結果が数値(シリアル値)で表示される場合は、セルの表示形式が「標準」や「数値」になっている可能性があります。
対処法:セルを右クリック→「セルの書式設定」→「表示形式」タブで「日付」を選択
さらに、過去の日付を求める際に意図しない結果になることがあります。
負の月数を指定する場合、絶対値を間違えないよう注意が必要でしょう。3か月前なら-3、3年前なら-36と指定します。
まとめ
エクセルで3か月後や3年後の日付を求める方法について解説してきました。
EDATE関数を使えば、月単位の日付計算を簡単かつ正確に実行できます。関数の構文は「=EDATE(開始日, 月数)」とシンプルで、3年後なら月数に36を指定するだけ。月末日の自動調整機能も備えており、実務での日付管理に最適でしょう。
より柔軟な計算が必要な場合は、DATE関数とYEAR・MONTH・DAY関数の組み合わせが有効です。年・月・日を個別に操作できるため、複雑な条件にも対応できます。
月末日を求める際はEOMONTH関数、日数単位の計算なら単純な加減算と、目的に応じて適切な方法を選択することが重要です。
これらの関数を活用すれば、契約満了日や支払期日などの自動計算が実現でき、業務効率が大幅に向上するでしょう。ぜひ実際の業務で試してみてください。