教えて!ExcelVBA!

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

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

構文

構文は以下の通りです。

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

解説

DatePart関数は、指定した日付から特定の情報を抽出するために使用されます。

引数 指定 内容
単位 必須 日付から抽出する情報の種類を指定します。設定値を以下で紹介します。
日時 必須 情報を抽出する対象となる日付を指定します。通常、日付を表す変数、セル参照、または日付の値を直接指定します。
週の開始曜日 省略可 週の最初の曜日を指定します。省略するとシステムの設定に従います。設定値を以下で紹介します。
年の第1週 省略可 年の最初の週を指定します。省略するとシステムの設定に従います。設定値を以下で紹介します。

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

定数 内容
"yyyy"
"q" 四半期
"m"
"y" 日の日数
"w" 曜日
"ww"
"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週として扱います。

使用例

DatePart("yyyy", Date)
DatePart("m", "2022/08/15")

使い方

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

例1: 年を抽出する

Dim result As Integer
result = DatePart("yyyy", Date)
MsgBox result

この例では、現在の日付から年を抽出しています。DatePart関数のinterval引数には"yyyy"を指定し、date引数にはDate関数を使用して現在の日付を指定しています。抽出した年はresult変数に格納され、メッセージボックスに表示されます。

例2: 月を抽出する

Dim result As Integer
result = DatePart("m", "2022/08/15")
MsgBox result

この例では、指定した日付から月を抽出しています。DatePart関数のinterval引数には"m"を指定し、date引数には日付を文字列形式で直接指定しています。抽出した月はresult変数に格納され、メッセージボックスに表示されます。

例3: 日を抽出する

Dim result As Integer
result = DatePart("d", Range("A1").Value)
MsgBox result

この例では、セルA1に格納された日付から日を抽出しています。DatePart関数のinterval引数には"d"を指定し、date引数にはセル参照を使用して日付を指定しています。抽出した日はresult変数に格納され、メッセージボックスに表示されます。

例4: 曜日を抽出する

Dim result As Integer
result = DatePart("w", "2022/08/15")
MsgBox result

この例では、指定した日付から曜日を抽出しています。DatePart関数のinterval引数には"w"を指定し、date引数には日付を文字列形式で直接指定しています。抽出した曜日はresult変数に格納され、メッセージボックスに表示されます。曜日は1(日曜日)から7(土曜日)までの数値で表されます。

プログラミング例

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

1.年齢の計算

DatePart関数を使って、生年月日から年齢を計算します。

Sub CalculateAge()
    Dim birthDate As Date
    Dim age As Integer
    birthDate = InputBox("生年月日を入力してください(yyyy/mm/dd):")
    age = DateDiff("yyyy", birthDate, Date)
    MsgBox "現在の年齢は " & age & " 歳です。"
End Sub

上記のプログラムでは、生年月日を入力すると現在の年齢がメッセージボックスに表示されます。

2.曜日の取得

特定の日付が何曜日か知りたい場合は、DatePart関数を使って取得することができます。

Sub GetDayOfWeek()
    Dim targetDate As Date
    Dim dayOfWeek As String
    targetDate = InputBox("日付を入力してください(yyyy/mm/dd):")
    dayOfWeek = Choose(Weekday(targetDate), "日", "月", "火", "水", "木", "金", "土")
    MsgBox targetDate & " は " & dayOfWeek & " 曜日です。"
End Sub

上記のプログラムでは、指定した日付の曜日がメッセージボックスに表示されます。

3.月の日数の取得

ある年と月を指定して、その月の日数を取得する例を紹介します。

Sub GetMonthDays()
    Dim year As Integer
    Dim month As Integer
    Dim days As Integer
    year = InputBox("年を入力してください:")
    month = InputBox("月を入力してください:")
    days = Day(DateSerial(year, month + 1, 0))
    MsgBox year & " 年 " & month & " 月は " & days & " 日あります。"
End Sub

上記のプログラムでは、指定した年と月に基づいて、その月の日数がメッセージボックスに表示されます。

4.現在の週番号を抽出

本日が年初から数えて何週目にあたるかを取得する例を紹介します。

Sub ShowCurrentWeekNumber()
    Dim currentWeek As Integer
    ' 現在の週番号を抽出
    currentWeek = DatePart("ww", Date)
    ' メッセージボックスに週番号を表示
    MsgBox "現在の週番号は " & currentWeek & " です。", vbInformation, "週番号の表示"
End Sub

上記のプログラムでは、現在の週番号がメッセージボックスに表示されます。

まとめ

DatePart関数を使えば、日付データから必要な情報を簡単に抽出することができます。これにより、日付データをより効果的に操作することができます。是非活用してください。