0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel VBA】DateDiff関数|日時の差を求める方法と注意点

Last updated at Posted at 2025-07-14

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でよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?