導入
実務において「契約満了日」や「支払い期限」「定期メンテナンス日」など、日付の計算は頻繁に発生します。単純に「+30日」と計算してしまうと、月によって日数が異なるため、思わぬズレが生じてしまいます。本稿では、月ごとの日数の違いを自動で考慮してくれるEDATE関数の活用法を解説します。この関数をマスターすることで、期限管理の正確性が格段に向上します。
基礎知識
Excelでは日付は「シリアル値」という数値で管理されており、1日=1として扱われます。そのため「日付+30」とすれば30日後の日付は出せますが、例えば1月31日の1ヶ月後に「+30」をすると、2月(28日または29日)をまたいでしまい、正確な「翌月の同日」にはなりません。
EDATE関数は、開始日から指定した月数だけ前後の日付を正確に算出するための関数です。
実装/解決策
EDATE関数は以下の書式で使用します。
=EDATE(開始日, 月)
・開始日:基準となる日付(セル参照または日付データ)
・月:何ヶ月後(または前)かを指定する数値(整数)
※1ヶ月後であれば「1」、1ヶ月前であれば「-1」を指定します。
サンプルプログラム
VBAで同様の処理を行いたい場合、ワークシート関数の「DateAdd」関数を利用するのが一般的ですが、Excelのセル上で数式を自動入力させたい場合は以下のように記述します。
Sub SetEDATEFormula()
‘ セルF2に購入日があると仮定し、セルG2に1ヶ月後の日付を数式で入れる
‘ EDATE関数は「WorksheetFunction」経由でも使えますが、
‘ セルに数式を埋め込む方がメンテナンス性が高く推奨されます。
Dim targetCell As Range
Set targetCell = Range(“G2”)
‘ セルG2にEDATE関数をセットする
‘ F2が開始日、1が加算する月数
targetCell.Formula = “=EDATE(F2, 1)”
‘ 結果を見やすくするために日付形式を整える
targetCell.NumberFormatLocal = “yyyy/mm/dd”
MsgBox “1ヶ月後の日付を算出しました。”
End Sub
応用・注意点
1. 存在しない日付の扱い
例えば「1月31日」の1ヶ月後を計算する場合、2月には31日が存在しません。この場合、EDATE関数は自動的に「2月28日(または29日)」という、その月の末日を返してくれます。これが単純な加算との最大の違いであり、実務で非常に重宝する点です。
2. 表示形式(表示形式)の罠
EDATE関数で計算した結果が「45345」のような数値で表示されることがあります。これはExcelが日付をシリアル値で持っているためです。セルを選択し、[ホーム]タブの数値グループから表示形式を「日付」に変更することで解決します。
3. 古いExcelバージョンでの注意
非常に古いExcel(2003以前)では、この関数を使うために「分析ツール」というアドインの有効化が必要です。現在の業務環境であれば基本的には標準で利用可能ですが、もしエラーが出る場合はアドイン設定を確認してください。
