今回はDateDiff関数の使い方と、サンプルとして2つの日付の日数分ループする方法についてご説明します。
DateDiff関数は指定した2つの日付の日数や月数、年数を取得するために使用します。
日付を操作する場合に、日数分ループするなどによく使用します。
日付の指定方法は「IsDate」「DateValue」「DateSerial」「DateAdd」「DateDiff」と色々ありますが、今回はこの「DateDiff関数」を使用した方法になります。
その他の日付や時間の操作は次の記事をご覧ください。
- IsDate関数の使い方と日付に変換する方法
- DateSerial関数の使い方と月初、月末の指定
- DateValue関数、TimeValue関数の使い方と日付、時刻の変換方法
- DateAdd関数の使い方と何日(時間)後を取得する方法
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」の定数一覧です。
定数 | 値 | 説明 |
vbUseSystem | 0 | 各国語対応APIの設定値 |
vbSunday | 1 | 日曜(既定値) |
vbMonday | 2 | 月曜日 |
vbTuesday | 3 | 火曜日 |
vbWednesday | 4 | 水曜日 |
vbThursday | 5 | 木曜日 |
vbFriday | 6 | 金曜日 |
vbSaturday | 7 | 土曜日 |
「firstweekofyear」の定数一覧です。
定数 | 値 | 説明 |
vbUseSystem | 0 | 各国語対応APIの設定値 |
vbFirstJan1 | 1 | 1月1日を含む週を年度の第1週とします |
vbFirstFourDays | 2 | 7日のうち少なくとも4日が新年度に含まれる週を年度の第1週とします |
vbFirstFullWeek | 3 | 全体が新年度に含まれる最初の週を年度の第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