今日は、今月の第何週目?
指定日が、指定月の第何週目かを知る必要があった。
そこで、Excel のユーザー定義関数で求めてみることにした。
今日は、2月27日。なので今日の日付を引数として、戻り値は、何週目かを表す数値にしよう。
色々な方法があると思うが、私はこう考えた。
- カウンターを一つ準備する。
- カウンターの初期値は、1とする(指定日が日曜日の場合は0)。
- 指定月一日から1日ずつ加算し、日曜日を通過するたびにカウンターに1を加える。
- 指定日になった時点のカウンターを、戻り値とする。
例えば2月27日の場合、
- 2/3
- 2/10
- 2/17
- 2/24
で、4回日曜日を通過する。従って、今日は第5週目となるはずだ。
早速、コードに落とし込んでみよう。
Function WeekNumber(target_date As Date) As Long Dim cnt As Long Dim FirstDay As Date FirstDay = DateSerial(Year(target_date), Month(target_date), 1) ' 指定日が1日なら、第一週確定。 If FirstDay = target_date Then WeekNumber = 1 Exit Function End If Select Case WorksheetFunction.Weekday(FirstDay) Case vbSunday: cnt = 0 Case Else: cnt = 1 End Select Dim d As Date d = FirstDay Do d = d + 1 If WorksheetFunction.Weekday(d) = vbSunday Then cnt = cnt + 1 End If If d = target_date Then Exit Do End If Loop WeekNumber = cnt End Function
よし、できた。
ところで確認の際、何やら怪しいものが目に入ってきた。
WEEKNUM関数?そんなもの知らんぞ。確認してみると、「その年の」何週目かが戻り値となる関数だとか。ということは・・・
Function WeekNumber(target_date As Date) As Long Dim FirstDay As Date FirstDay = DateSerial(Year(target_date), Month(target_date), 1) WeekNumber = WorksheetFunction.WeekNum(target_date) - _ WorksheetFunction.WeekNum(FirstDay) _ + 1 End Function
これで充分だった。
今日の教訓:良く調べてから行動しましょう。
参考まで。