指定された 2 つの日時の差分を指定の単位で返す関数です。
日時の差分を返すため、指定の期間の日数や年数、経過時間などを求めることができます。
関数仕様
構文 |
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) |
引数 |
引数 |
省略 |
説明 |
interval |
不可 |
計算する時間単位を表す以下の文字列式を指定します。
設定値 |
内容 |
yyyy
|
年
|
q
|
四半期
|
m
|
月
|
y
|
年間通算日
|
d
|
日
|
w
|
曜日
|
ww
|
週
|
h
|
時
|
n
|
分
|
s
|
秒
|
|
date1
date2
|
不可 |
間隔を計算する 2 つの日付を指定します。
date1 より date2 が大きい(未来)の場合、この関数は正数を返します。
date1 より date2 が小さい(過去)の場合、この関数は負数を返します。
|
firstdayofweek |
可 |
週の始まりの曜日を定数を指定します。
省略した場合は、定数 vbSunday が規定値となります。
定数 |
値 |
内容 |
vbUseSystem
|
0
|
各国語対応APIの設定値を使います |
vbSunday
|
1
|
日曜(規定値) |
vbMonday
|
2
|
月曜 |
vbTuesday
|
3
|
火曜 |
vbWednesday
|
4
|
水曜 |
vbThursday
|
5
|
木曜 |
vbFriday
|
6
|
金曜 |
vbSaturday
|
7
|
土曜 |
|
firstweekofyear |
可 |
年度の第 1 週の定義を指定します。
省略した場合は、定数 vbFirstJan1 が規定値となります。
定数 |
値 |
内容 |
vbUseSystem
|
0
|
各国語対応APIの設定値を使います。 |
vbFirstJan1
|
1
|
1 月 1 日を含む週を年度の第 1 週として扱います。(規定値) |
vbFirstFourDays
|
2
|
7 日のうち少なくとも 4 日が新年度に含まれる週を年度の第 1 週として扱います。 |
vbFirstFullWeek
|
3
|
7 日全てが新年度に含まれる週を年度の第 1 週として扱います。 |
|
|
戻り値 |
バリアント型(内部処理形式 Integer の Variant)
|
この関数は、引数に指定した 2 つの日時の差分(間隔)を求め、結果をバリアント型 (内部処理形式 Integer の Variant) で返します。 引数に指定する 2 つの日時のうち、より小さい方(より過去)の日付を date1 に、より大きい方の日付を date2 に指定すると、差分を正数で返します。 逆により大きい方(より未来)の日付を date1 に、より小さい方の日付を date2 に指定すると、差分を負数で返します。 この関数が有効とする日付の範囲は、西暦 100 年 1 月 1 日 ~ 9999 年 12 月 31 日であり、指定日がその範囲を超える場合は、実行時エラーとなります。
動作検証
条件 |
例 |
動作結果 |
年の差分を指定した場合
|
DateDiff("yyyy", "2009/1/2", "2012/12/31")
|
3 |
四半期(q)の差分を指定した場合 |
DateDiff("q", "2012/1/2", "2012/9/2")
|
2 |
月(m)の差分を指定した場合
|
DateDiff("m", "2012/6/30", "2012/1/2")
|
-5(※1) |
年間通算日(y)の差分を指定した場合
|
DateDiff("y", "2012/1/2", "2012/4/2")
|
91(※2) |
日(d)の差分を指定した場合
|
DateDiff("d", "2012/1/2", "2012/4/2")
|
91(※2) |
曜日(w)の差分を指定した場合
|
DateDiff("w", "2012/1/2", "2012/1/22")
|
2(※3) |
週(ww)の差分を指定した場合
|
DateDiff("ww", "2012/1/2", "2012/1/22")
|
3(※4) |
時(h)の差分を指定した場合
|
DateDiff("h", "12:34:56", "16:01:02")
|
5 |
分(n)の差分を指定した場合
|
DateDiff("n", "12:34:56", "16:01:02")
|
207 |
秒(s)の差分を指定した場合
|
DateDiff("s", "12:34:56", "16:01:02")
|
12366 |
存在しない日付を指定した場合
|
DateDiff("d", "2012/1/32", "2012/2/22")
|
実行時エラー |
日付と評価できない文字列を指定した場合
|
DateDiff("d", "2012/1/31", "test")
|
実行時エラー |
日付と評価できない数値を指定した場合
|
DateDiff("d", 1, 3)
|
2(※5) |
日付にNull値を指定した場合
|
DateDiff("d", "2012/1/2", Null)
|
Null(※6) |
※1 date1 より date2 の方が小さい(より過去である)場合、返る値は負数となります。
※2 年間通算日(y)、日(d)は、いずれも日にちを計算する為、結果は同じになります。
※3 曜日(w)を指定した場合、date1 の曜日が date2 までの間にいくつあるかを返します。(暦上の週数ではありません)
※4 週(ww)を指定した場合、date1 と date2 の間の日曜の数を返します。(暦上の週数を返します)
※5 日付に数値を指定した場合、この関数は「1899/12/30」を 0 として、そこからの日数で日付を算出し、その値に対して差分計算を行います。
※6 日付に Null 値を指定した場合、この関数は Null を返します。 エラーとはなりません。
サンプルコード
Sub Sample()
Debug.Print DateDiff("d", Now, "2012/6/3")
End Sub
※ 上記サンプルは現在から指定日までの残り日数を返します。