VBAで日付を扱っていると、次のようなことはありませんか?
- 2つの日付の差を求めたい
- 何日経過したか知りたい
- 年齢や勤務年数を計算したい
このような場合は、DateDiff関数を使うことで簡単に解決できます。
日付や時間の差を柔軟に計算できる、実務で非常に重要な関数です。
この記事では、DateDiffの基本から実務で使える応用までを初心者向けに分かりやすく解説します。
この記事でできること
- 日付の差(日数・月数・年数)を計算できる
- 時間や分の差も求められる
- 実務で使える計算方法が分かる
基本:DateDiff関数の使い方
まずは基本構文です。
DateDiff(間隔, 開始日, 終了日)
例:
MsgBox DateDiff("d", "2024/01/01", "2024/01/10")
→ 結果:9(日の差)
間隔(第1引数)の種類
| 指定 | 意味 |
|---|---|
| “yyyy” | 年 |
| “m” | 月 |
| “d” | 日 |
| “h” | 時間 |
| “n” | 分 |
| “s” | 秒 |
日数の差を求める
Dim diff As Long
diff = DateDiff("d", "2024/01/01", "2024/01/31")
MsgBox diff
→ 30日
月数の差を求める
Dim diff As Long
diff = DateDiff("m", "2024/01/01", "2024/04/01")
MsgBox diff
→ 3ヶ月
年数の差を求める
Dim diff As Long
diff = DateDiff("yyyy", "2000/01/01", Date)
MsgBox diff
→ 年数(年齢計算などに使用)
時間・分・秒の差を求める
時間差
DateDiff("h", "10:00", "15:00")
→ 5時間
分差
DateDiff("n", "10:00", "10:30")
→ 30分
秒差
DateDiff("s", "10:00:00", "10:00:10")
→ 10秒
セルの値を使う例
Dim diff As Long
diff = DateDiff("d", Range("A1").Value, Range("B1").Value)
MsgBox diff
A1とB1の日付差を計算できます。
実務でよく使う例
① 経過日数を計算
DateDiff("d", Range("A1").Value, Date)
→ 今日までの経過日数
② 年齢を計算
DateDiff("yyyy", Range("A1").Value, Date)
※誕生日を考慮する場合は補正が必要
③ 作業時間の計算
DateDiff("n", "09:00", "18:00")
→ 540分(9時間)
注意点(重要)
① 単純な差ではない
DateDiffは「境界をまたいだ回数」を返します。
そのため、完全な経過時間とはズレる場合があります。
② 年齢計算は注意
誕生日が来ていない場合も1年としてカウントされます。
よくあるエラーと対処法
① 日付として認識されない
文字列ではなく日付型か確認してください。
② 計算結果がズレる
DateDiffの仕様(境界カウント)を理解してください。
③ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- DateDiffで日付差を計算できる
- 日・月・年・時間など柔軟に対応
- 実務では経過日数・年齢・時間計算で活躍
- 仕様(境界カウント)に注意
DateDiffを使いこなせるようになると、日付処理の幅が大きく広がります。
業務効率化に直結する重要な関数なので、ぜひ活用してみてください。

コメント