更新日:、 作成日:

VBA DateDiff 関数:日数を計算する

はじめに

Excel VBA マクロの DateDiff 関数から日数を計算する方法を紹介します。

DateDiff 関数は、日付の期間を日数や時間で返します。

DateDiff("d", 日付1, 日付2) のようにして、日数を取得できます。

DateDiff("n", 時刻1, 時刻2) のようにして、分数を取得できます。

経過した月数や日数、時間などを取得したいときに使用します。

日付の期間を計算するには「日付を計算する」をご覧ください。

DateDiff 関数の引数と戻り値

DateDiff(単位, 開始日時, 終了日時)
開始日時から終了日時までの期間を指定した単位で取得します。

引数「単位」期間の単位を表す文字を指定します。
引数「開始日時」期間の開始となる日時を指定します。
引数「終了日時」期間の終了となる日時を指定します。
戻り値の型数値型 (Long)

引数「単位」

単位の文字 説明
yyyy
m
d
h
n
s
q四半期
y通年での日数
w曜日
ww

解説

引数「単位」が d (日) なら、次の結果を返します。

開始日時 終了日時 結果
1/21/31
1/21/20
1/21/1-1

同じ日付のときは 1 日も経過していないので 0 を返します。

引数「単位」が w (曜日) なら、引数「開始日時」の曜日が次の日から、引数「終了日時」までに何回あるかを返します。

引数「単位」が ww (週) なら、日曜日が引数「開始日時」の次の日から、引数「終了日時」までに何回あるかを返します。

引数「単位」が q (四半期) なら、引数「開始日時」の次の日から、引数「終了日時」までに 1月1日4月1日7月1日10月1日 が何回あるかを返します。

演算子で計算

演算子」を使用して 日付 - 日付 で日数を、時刻 - 時刻 で時間を計算できます。

日付を計算するには「日付を計算する」をご覧ください。

Excel の関数で計算

Excel の「エクセル 日付の日数計算をする」の方法で、休日を除いた日数など好きな日数を取得できます。

Excel の関数を使用するには「WorksheetFunction」をご覧ください。

使用例

DateDiff 関数の使用例を紹介します。

日数や時間を取得する

日数や時間を取得します。

Dim l As Long

l = DateDiff("yyyy", CDate("2013/1/1"), CDate("2014/12/31"))    ' 年
Debug.Print(l) ' 1

l = DateDiff("m", CDate("2013/1/1"), CDate("2013/3/31"))        ' 月
Debug.Print(l) ' 2

l = DateDiff("d", CDate("2013/1/1"), CDate("2013/1/7"))         ' 日
Debug.Print(l) ' 6

l = DateDiff("h", CDate("2013/1/1"), CDate("2013/1/1 1:00:00")) ' 時
Debug.Print(l) ' 1

l = DateDiff("n", CDate("2013/1/1"), CDate("2013/1/1 1:00:00")) ' 分
Debug.Print(l) ' 60

l = DateDiff("s", CDate("2013/1/1"), CDate("2013/1/1 1:00:00")) ' 秒
Debug.Print(l) ' 3600

演算子で日数を取得する

演算子」を使用して、日数や時間を取得できます。

Dim 日数 As Long
日数 = CDate("2013/1/1") - CDate("2013/1/1")
Debug.Print(日数) ' 0

日数 = CDate("2013/1/2") - CDate("2013/1/1")
Debug.Print(日数) ' 1

日数 = CDate("2013/1/8") - CDate("2013/1/1")
Debug.Print(日数) ' 7

Dim 時間 As Date
時間 = CDate("10:0:0") - CDate("1:0:0")
Debug.Print(時間) ' 9:00:00

時間 = CDate("10:0:0") - CDate("0:1:0")
Debug.Print(時間) ' 9:59:00

時間 = CDate("10:0:0") - CDate("0:0:1")
Debug.Print(時間) ' 9:59:59

休日を除いた日数を取得する

Excel の「エクセル 日付の日数計算をする」の方法で、休日を除いた日数など好きな日数を取得できます。

Excel の関数を使用するには「WorksheetFunction」をご覧ください。
Dim d1 As Date
Dim d2 As Date
d1 = "2013/1/1"
d2 = "2013/1/7"

' 休日を除いた日数
Dim l As Long
l = WorksheetFunction.NetworkDays_Intl(d1, d2)
Debug.Print(l) ' 5