指定した日付が第何週目であるかを調べる場合、VBAではDatePart関数が利用できます。
DatePart関数は、指定した日付を指定した時間間隔(日、週など)で表すことができる関数です。
DatePart関数の概要
書式は以下の通りです。
《書式》
DatePart(interval, date, [ firstdayofweek, [ firstweekofyear ]])
※[]内は省略可能
intervalには時間間隔の基準を指定します。
dateには任意の日時を指定します。
firstdayofweekは週の始まりの基準となる曜日を指定します。
firstweekofyearは第一週となる基準を指定します。
intervalの設定
評価する時間間隔の基準を指定します。省略はできません。
値を指定する際は“”で値を囲みます。
値 | 説明 |
yyyy | 年(何年かを返す) |
q | 四半期(第何四半期かを返す) |
m | 月(何月かを返す) |
y | 年通算日を返す |
d | 日(何日かを返す) |
w | 平日(週の中で何番目かを返す。基準はfirstdayofweekで指定) |
ww | 週番号を返す。第一週目の基準はfirstweekofyearで指定します。 |
h | 時(何時かを返す) |
n | 分(何分かを返す) |
s | 秒(何秒かを返す) |
firstdayofweekの設定
週の始まりとなる曜日を指定します。
定数 | 値 | 説明 |
vbUseSystem | 0 | NLS APIの設定を使用 |
vbSunday | 1 | 日曜日(既定値) |
vbMonday | 2 | 月曜日 |
vbTuesday | 3 | 火曜日 |
vbWednesday | 4 | 水曜日 |
vbThursday | 5 | 木曜日 |
vbFriday | 6 | 金曜日 |
vbSturday | 7 | 土曜日 |
firstweekofyearの設定
年の始まりとなる週の基準を指定します。
定数 | 値 | 説明 |
vbUseSystem | 0 | NLS APIの設定を使用 |
vbFirstJan1 | 1 | 1月1日が含まれる週から開始(既定値) |
vbFirstFourDays | 2 | 新年で最初に1週間のうち4日以上含まれる週から開始 |
vbFirstFullWeek | 3 | 新年で初めて1週間が完全に含まれる週から開始 |
DatePart関数を利用する
DatePart関数の使い方とサンプルコードです。
年通算日を調べる
調べたい日付の年通算日を調べる場合、intervalの設定で”y”を指定します。
この場合、firstdayofweek,firstweekofyearの設定は省略しても大丈夫です。
Sub 年通算日()
'任意の日付の年通算日を表示する
Dim doy As String
Dim doyNum As Long
Dim msg As String
doy = "2021/1/21" '任意の日付を指定
doyNum = DatePart("y", doy)
msg = doy & "は年通算日で表すと" & doyNum & "です。"
MsgBox (msg)
End Sub
週番号を調べる
調べたい日付を含む週の週番号を調べる場合、intervalの設定で”ww”を指定します。
また、週の基準を既定値から変更する場合はfirstdayofweekとfirstweekofyearも指定します。
Sub 週番号()
'調べたい日付を含む週の週番号を表示する。
Dim doy As String
Dim doyNum As Long
Dim doyNum2 As Long
Dim msgBase As String
Dim msg As String
Dim msg2 As String
doy = "2021/3/21" '任意の日付を指定
doyNum = DatePart("ww", doy, 1, 1) '1月1日を含む週を第一週
doyNum2 = DatePart("ww", doy, 1, 3) '年で初めて1週間が完全に含まれる週を第一週
msgBase = doy & "の週番号は"
msg = "1月1日の週を基準とすると、" & doyNum & "です。"
msg2 = "始めて1週間が完全に含まれる週を第一週とすると、" & doyNum2 & "です。"
MsgBox (msgBase & vbCrLf & msg & vbCrLf & msg2)
End Sub
コメント