DateDiff関数の使い方と注意点
DateDiff関数は、2つの日付の差を指定した単位(年・月・日・時間など)で取得する関数です。
期間の長さを計算する際に非常に便利です。
構文
DateDiff(時間単位, 日付1, 日付2[, 最初の曜日[, 年の開始週]])
-
時間単位 : 差を取得する単位を表す文字列。以下のような指定があります。
設定 説明 "yyyy" 年 "q" 四半期 "m" 月 "y" 通年での日数 "d" 日 "w" 曜日単位(日曜日から土曜日) "ww" 週 "h" 時 "n" 分 "s" 秒 -
日付1 : 開始日(Date型または日付として解釈可能な文字列)
-
日付2 : 終了日(同上)
-
最初の曜日 : 週の開始曜日(省略可)
定数 値 週の開始日 vbUseSystem 0 システム設定に従う vbSunday 1 日曜日(デフォルト) vbMonday 2 月曜日 vbTuesday 3 火曜日 vbWednesday 4 水曜日 vbThursday 5 木曜日 vbFriday 6 金曜日 vbSaturday 7 土曜日 -
年の開始週 : 年の第1週(省略可)
定数 値 説明 vbUseSystem 0 システム設定に従う vbFirstJan1 1 1月1日を含む週を第1週(デフォルト) vbFirstFourDays 2 4日以上含む最初の週を第1週 vbFirstFullWeek 3 最初の7日間すべて含まれる週を第1週 -
戻り値 : 日付1から日付2までの差を、指定単位で整数値として返す
使用例
日数の差を取得する
Sub Sample()
Debug.Print DateDiff("d", #1/1/2025#, #1/10/2025#)
End Sub
▶ 出力結果
9
年や月の差を取得する
Sub Sample()
Debug.Print DateDiff("yyyy", #4/1/2020#, #4/1/2025#)
Debug.Print DateDiff("m", #1/1/2025#, #4/1/2025#)
End Sub
▶ 出力結果
5
3
時刻の差を取得する(時間・分・秒)
Sub Sample()
Debug.Print DateDiff("h", #10:00:00#, #15:30:00#)
Debug.Print DateDiff("n", #10:00:00#, #10:30:00#)
Debug.Print DateDiff("s", #10:00:00#, #10:00:10#)
End Sub
▶ 出力結果
5
30
10
⚠️注意
差分は「整数値」で返される
小数点の差があっても切り捨てになります。
Sub Sample()
Debug.Print DateDiff("d", #7/10/2025#, #7/11/2025 23:59:59#)
End Sub
▶ 出力結果
1
1日23時間59分59秒差があっても「1日」と判定されます。
負の値も返る
日付1が日付2より未来の場合は負の値になります。
Sub Sample()
Debug.Print DateDiff("d", #1/10/2025#, #1/1/2025#)
End Sub
▶ 出力結果
-9
文字列を渡す場合は、日付として解釈できる形式にする必要がある
Sub Sample()
On Error Resume Next
Err.Clear
Debug.Print DateDiff("d", "2025.07.10", "2025/07/11") ' ピリオド区切り
If Err.Number <> 0 Then Debug.Print "2025.07.10 : エラー:" & Err.Description
Err.Clear
Debug.Print DateDiff("d", "明日", "2025/07/11") ' 自然言語
If Err.Number <> 0 Then Debug.Print "明日 : エラー:" & Err.Description
Err.Clear
Debug.Print DateDiff("d", "2025/13/01", "2025/07/11") ' 不正な月(13月)
If Err.Number <> 0 Then Debug.Print "2025/13/01 : エラー:" & Err.Description
Err.Clear
Debug.Print DateDiff("d", "2025/07/32", "2025/07/11") ' 不正な日(32日)
If Err.Number <> 0 Then Debug.Print "2025/07/32 : エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果
2025.07.10 : エラー:型が一致しません。
明日 : エラー:型が一致しません。
2025/13/01 : エラー:型が一致しません。
2025/07/32 : エラー:型が一致しません。
関連するVBA関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方