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

はじめに

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

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

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

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

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

日付の期間を計算するには「日付を計算する」をご覧ください。
  • 目次
    • DateDiff 関数
    • 解説
    • 使用例

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」をご覧ください。

使用例

日数や時間を計算する。

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