DateDiff関数

二つの日付の時間間隔を教えてくれるDateDiff関数について説明します。なにか大きなイベント、たとえば「スポーツ大会」などの日付まであと何日あるかを表示したいときなどに使用します。DataAdd関数の項でも書いたように、日付の計算はたいへんです。DateDiff関数を使って「あと何日」を表示したり、自分が生まれて何日たったかを計算したりと、とても便利に使えます。まず構文を見てみましょう。

[構文]DateDiff関数

DateDiff(interval,date1,date2[,firstdayofweek[,firstweekofyear]])
    interval:date1とdate2の間隔を計算するための時間単位を文字列で指定
    date1,date2:比較する日付
    firstdayofweek:(省略可)週の始まりの曜日を表す定数。省略すると日曜日
    firstweekofyear:(省略可)年度の第一週を表す定数。省略すると1月1日を含む週が第1週となる

構文のカッコにカンマ区切りで表しているのが引数です。[]で囲まれているものは省略可能であることを表します。

以下がinteralの設定値です。間隔を計算するための、時間単位の指定です。

DateDiff関数の引数intervalの設定値

設定値 内容
yyyy
q 四半期(3か月1単位)
m
y 年間通算日(1日1単位)
d
w 週(7日1単位)
ww 週(7日1単位)
h
n
s

DateAddのinterval引数と「w」の指定単位が違うようです。「w」は指定日付の間の週数を戻します。「ww」は指定日付の間に日曜日(週の最初の曜日)が何回あるかを返します。

以下の表はfirstdayofweekの設定値です。

引数firstdayofweekの設定値

定数 内容
vbUseSysyem 0 各国の言語システムに合わせた設定値を使用
VbSunday 1 (既定値)日曜日
VbMonday 2 月曜日
VbTuesday 3 火曜日
VbWednesday 4 水曜日
VbThursday 5 木曜日
VbFriday 6 金曜日
VbSaturday 7 土曜日

firstweekofyearの設定値は次のとおりです。

引数firstweekofyearの設定値

定数 内容
VbUseSystem 0 各国の言語システムに合わせた設定値を使用
VbFirstJan1 1 (既定値)1月1日を含む週を年度の第1週として使用
VbFirstFourDays 2 7日のうち少なくとも4日が新年度に含まれる週を使用
VbFirstFullWeek 3 全体が新年度に含まれる最初の週を使用

以下例題のリストです

[リスト7]Rei_DateDiff(日付関係.xlsm)

Sub Rei_DateDiff()
    a = #1/1/2010#
    b = #1/20/2010#
    c = DateDiff("d", a, b)         '(1)結果:19
    MsgBox (c)
    c = DateDiff("w", a, b)         '(2)結果:2
    MsgBox (c)
    c = DateDiff("ww", a, b)         '(3)結果:3
    MsgBox (c)
    c = DateDiff("ww", a, b, vbFriday)  '(4)結果:2
    MsgBox (c)

    c = DateDiff("d", b, a)         '(5)結果:-19
    MsgBox (c)

End Sub

(1)は変数aとbの日数を表します。1日から20日までは19日間です。intervalは「y」「d」いずれかを指定します。(2)は「w」を指定しました。a,b間の週の数を戻します。aの曜日から1週間が1になります。2010/01/01は金曜日なので、2010/01/20までに2回あるということになります。aの日付はカウントされません。(3)は「ww」です。「ww」の場合は指定日付の間に日曜日(週の最初の曜日)が何回あるかを返します。(4)のようにfirstdayofweekを変更すると、変更された曜日の回数に変わります。(5)で開始日付と終了日付を逆にしてみました。マイナスの数値が帰ってきます。

intervalの書き方はDateAdd関数と同じです。リスト7の(1)から(4)のイメージ図を以下に示します。

図1:DateDiff関数のイメージ図

DatePart関数

年間通算日など指定した時間表示に従って時間の単位を教えてくれるDatePart関数について説明します。

[構文]DataPart関数

DatePart(interval,date[,firstdayofweek[,firstweekofyear]])
    interval:時間間隔の単位を文字列で指定
    date:設定日付
    firstdayofweek:(省略可)週の始まりの曜日を表す定数。省略すると日曜日
    firstweekofyear:(省略可)年度の第一週を表す定数。省略すると1月1日を含む週が第1週となる

構文のカッコにカンマ区切りで表しているのが引数です。[]で囲まれているものは省略可能であることを表します。

以下かintervalの設定値です。間隔を計算するための、時間単位の指定です。

DatePart関数の引数intervalの設定値

設定値 内容
yyyy
q 四半期(3か月1単位)
m
y 年間通算日(1日1単位)
d
w 週(7日1単位)
ww 週(7日1単位)
h
n
s

週の最初の曜日が日曜日の時、「w」は、1:日曜日、2:月曜日・・・7:土曜日の数値で返します。「ww」は指定日が年の初めから、日曜日を開始とする週の何週めかを返します。

firstdayofweekとfirstweekofyearの設定値はDateDiff関数と同じです。

[リスト8]Rei_DatePart(日付関係.xlsm)

Sub Rei_DatePart()
    a = #2/10/2010#
    c = DatePart("y", a)    '(1)結果:41
    MsgBox (c)
    c = DatePart("d", a)    '(2)結果:10
    MsgBox (c)
    c = DatePart("w", a)    '(3)結果:4
    MsgBox (c)
    c = DatePart("ww", a)    '(4)結果:7
    MsgBox (c)
    c = DatePart("ww", a, vbFriday)   '(5)結果:6
    MsgBox (c)
End Sub

(1)のようにintervalに「y」を指定すると、年の初めからの今日も含めた日付が戻ります。(2)で「d」を指定しました。「d」はその月の日数を返します。(3)は「w」です。指定日の曜日を1:日曜日、2:月曜日・・・7:土曜日の数値で返します。firstdayofweekで週の最初の曜日を変更すると、変更された曜日が1になり、順次続きます。(4)は指定日が年の初めから、日曜日を開始とする週の何週めかを返します。firstdayofweekを(5)のように金曜日に指定すると、金曜日を週の初めにする週の何週めかを返します。