教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 関数】DateDiff関数の使い方を教えて!

構文

構文は以下の通りです。

DateDiff(単位, 日時1, 日時2, [週の開始曜日], [年の第1週])

解説

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

引数 指定 内容
単位 必須 計算する期間の単位を指定します。設定値を以下で紹介します。
日時1 必須 期間の開始日を指定します。
日時2 必須 期間の終了日を指定します。
週の開始曜日 省略可 週の最初の日を指定します。設定値を以下で紹介します。
年の第1週 省略可 年の最初の週を指定します。設定値を以下で紹介します。

単位には以下の設定値が指定できます。

定数 内容
"yyyy" 年単位
"q" 四半期単位
"m" 月単位
"y" 日単位(年を無視した日数)
"w" 週単位
"d" 日単位
"h" 時間単位
"n" 分単位
"s" 秒単位

週の開始曜日には以下の設定値が指定できます。

定数 内容
vbSunday 1 日曜日(既定値)
vbMonday 2 月曜日
vbTuesday 3 火曜日
vbWednesday 4 水曜日
vbThursday 5 木曜日
vbFriday 6 金曜日
vbSaturday 7 土曜日

年の第1週には以下の設定値が指定できます。

定数 内容
vbFirstJan1 1 (既定値)1月1日を含む週を年度の第1週として扱います。
vbFirstFourDays 2 7日のうち少なくとも4日が新年度に含まれる週を年度の第1週として扱います。
vbFirstFullWeek 3 全体が新年度に含まれる最初の週を年度の第1週として扱います。

使用例

DateDiff("yyyy", #7/1/1970#, #6/9/2013#)
DateDiff("m", #4/1/1970#, #6/9/2013#)
DateDiff("d", #4/1/1970#, #6/9/2013#

使い方

具体的な使い方を幾つか紹介します。

例1: 年齢を計算する

Sub CalculateAge()
    Dim 生年月日 As Date
    Dim 現在の日付 As Date
    Dim 年齢 As Integer
    ' 生年月日を設定(例: 1990年1月1日)
    生年月日 = DateSerial(1990, 1, 1)
    ' 現在の日付を取得
    現在の日付 = Date
    ' 年齢を計算
    年齢 = DateDiff("yyyy", 生年月日, 現在の日付)
    ' 結果を表示
    MsgBox "年齢は " & 年齢 & " 歳です。"
End Sub

この例では、生年月日から現在の日付までの年齢を計算しています。DateDiff関数を使用して、年単位での差を計算しています。

例2: 2つの日付間の月数を計算する

Sub CalculateMonthsBetweenDates()
    Dim 日付1 As Date
    Dim 日付2 As Date
    Dim 月数 As Integer
    ' 日付1と日付2を設定
    日付1 = DateSerial(2023, 1, 1)
    日付2 = DateSerial(2023, 12, 31)
    ' 2つの日付間の月数を計算
    月数 = DateDiff("m", 日付1, 日付2)
    ' 結果を表示
    MsgBox "日付1と日付2の間の月数は " & 月数 & " です。"
End Sub

この例では、2つの日付間の月数を計算しています。DateDiff関数の"m"パラメータを使用して、月単位での差を計算しています。

例3: 特定の週の曜日を求める

Sub FindDayOfWeekInWeek()
    Dim 年 As Integer
    Dim 週 As Integer
    Dim 曜日 As String
    ' 年と週を設定
    年 = 2023
    週 = 5 ' 5週目
    ' 特定の週の水曜日を求める
    曜日 = WeekdayName(DatePart("w", DateSerial(年, 1, 1) + (週 - 1) * 7 + 3))
    ' 結果を表示
    MsgBox "2023年の第" & 週 & "週の水曜日は " & 曜日 & " です。"
End Sub

この例では、指定した年の特定の週の曜日を求めています。DateDiff関数は使用していませんが、DatePart関数を使用して指定した週の特定の曜日を計算しています。

プログラミング例

以下に、プログラミング例を紹介します。

Sub CalculateDuration()
    Dim startDate As Date
    Dim endDate As Date
    Dim duration As Long
    startDate = #1/1/2023# ' 開始日を指定します。
    endDate = #12/31/2023# ' 終了日を指定します。
    ' 日単位で期間を計算します。
    duration = DateDiff("d", startDate, endDate)
    ' 結果を表示します。
    MsgBox "期間の日数は " & duration & " 日です。"
End Sub

上記のプログラムでは、startDateに2023年1月1日、endDateに2023年12月31日を指定しています。そして、DateDiff関数を使用して日単位の期間を計算し、duration変数に結果を格納します。最後に、MsgBox関数を使用して結果を表示します。

まとめ

DateDiff関数は、日付の間の期間を計算するために便利な機能です。この関数を使用することで、日数や時間、分、秒などの単位で期間を計算することができます。是非活用してください。