Excel VBA DateDiff関数の使い方と2つの日付間をループする

VBA関数

今回はDateDiff関数の使い方と、サンプルとして2つの日付の日数分ループする方法についてご説明します。

DateDiff関数は指定した2つの日付の日数や月数、年数を取得するために使用します。

日付を操作する場合に、日数分ループするなどによく使用します。

日付の指定方法は「IsDate」「DateValue」「DateSerial」「DateAdd」「DateDiff」と色々ありますが、今回はこの「DateDiff関数」を使用した方法になります。

その他の日付や時間の操作は次の記事をご覧ください。

1.DateDiff関数の使い方

DateDiff関数は指定した2つの日付の間隔を返します。

引数や、定数がたくさんありますが、基本的に使用する分には後ろの2つの引数は、使用しなくても十分使用できます。

計算時に混乱しがちですが、指定した日付の日数計算は「date1」は1日に含まれません

2018/1/1と2018/1/31を算出すると31日と思いがちですが、算出結果は30日になります。

DateDiff関数は次のように記述します。

DateDiff(interval,date1,date2[,firstdayofweek][,firstweekofyear])

引数一覧です。

引数省略説明
interval必須date1とdate2の間隔を計算するための単位を指定します。
date1必須間隔を計算する日付を指定します。
date2必須間隔を計算する日付を指定します。
firstdayofweek省略可能週の始まりの曜日を指定します。
firstweekofyear省略可能年度の第1週を指定します。

「interval」の設定値一覧です。

設定値説明
yyyy
q四半期
m
y年間通算日
d
w週日
ww
h
n
s

「firstdayofweek」の定数一覧です。

定数説明
vbUseSystem0各国語対応APIの設定値
vbSunday1日曜(既定値)
vbMonday2月曜日
vbTuesday3火曜日
vbWednesday4水曜日
vbThursday5木曜日
vbFriday6金曜日
vbSaturday7土曜日

「firstweekofyear」の定数一覧です。

定数説明
vbUseSystem0 各国語対応APIの設定値
vbFirstJan11 1月1日を含む週を年度の第1週とします
vbFirstFourDays27日のうち少なくとも4日が新年度に含まれる週を年度の第1週とします
vbFirstFullWeek3全体が新年度に含まれる最初の週を年度の第1週とします

2.DateDiff関数のサンプルコード

基本的なサンプルコードと、2つの指定した日付の日数分をループするサンプルコードです。

基本的なサンプルコード

基本的なコードです。

日付は「Date1 = #2018/1/1#」と指定しても同じ結果になります。

Sub Sample1()

Dim Date1 As Date
Dim Date2 As Date

Date1 = "2018/1/1"
Date2 = "2018/4/30"

Debug.Print DateDiff("yyyy", Date1, Date2) '0年
Debug.Print DateDiff("m", Date1, Date2) '3ヵ月
Debug.Print DateDiff("d", Date1, Date2) '119日
Debug.Print DateDiff("ww", Date1, Date2) '17週

End Sub

日付の間隔をループするサンプルコード

指定した2つの日付の日数分ループして、DateAdd関数で加算してセルに出力します。

日付のリスト作成などに使用します。

この時0から始める事で指定した日も取得出来ます。

「DateAdd関数」の使い方は「DateAdd関数の使い方」をご覧ください。

Sub Sample2()

Dim Date1 As Date
Dim Date2 As Date
Dim i     As Long

Date1 = "2018/1/1"
Date2 = "2018/4/30"

For i = 0 To DateDiff("d", Date1, Date2)

    Cells(i + 1, 1) = DateAdd("d", i, Date1)

Next i

End Sub
タイトルとURLをコピーしました