年通算日から日付を取得する関数です。
年通算日から日付を取得する必要があったので作成しました。
コピペすればそのまま使用できます。参考にしてみてください。
年通算日から日付を取得する関数の概要
引数に年、年通算日を与えると、日付を返す自作関数です。
《書式》
doy2Date(年,年通算日)
引数である”年”と”年通算日”は整数型で与えます。戻り値はDate型になります。
以下、関数のサンプルコードです。
Function doy2Date(ByVal yr As Long, ByVal doyNum As Long) As Date
Dim mn As Long
Dim doy As Long
If yr Mod 4 = 0 Then
If doyNum = 60 Then
mm = 2
doy = 29
GoTo rslt
ElseIf doyNum >= 61 Then
doyNum = doyNum - 1
End If
End If
Select Case doyNum
Case 1 To 31 '1月
mn = 1
doy = doyNum
Case 32 To 59 '2月
mn = 2
doy = doyNum - 31
Case 60 To 90 '3月
mn = 3
doy = doyNum - 59
Case 91 To 120 '4月
mn = 4
doy = doyNum - 90
Case 121 To 151 '5月
mn = 5
doy = doyNum - 120
Case 152 To 181 '6月
mn = 6
doy = doyNum - 151
Case 182 To 212 '7月
mn = 7
doy = doyNum - 181
Case 213 To 243 '8月
mn = 8
doy = doyNum - 212
Case 244 To 273 '9月
mn = 9
doy = doyNum - 243
Case 274 To 304 '10月
mn = 10
doy = doyNum - 273
Case 305 To 334 '11月
mn = 11
doy = doyNum - 304
Case 335 To 365 '12 月
mn = 12
doy = doyNum - 334
End Select
rslt:
doy2Date = yr & "/" & mn & "/" & doy
End Function
関数の説明
与えられた引数の”年”情報をもとに、うるう年かどうかを式(yr Mod 4)で調べています。うるう年の場合、年通算日で60番目の日は2月29日となるので月と日付を確定しrsltへ移動します。
うるう年の場合で、年通算日が61以降の日付は年通算日=年通算日-1として補正することで通常の都市と同じ扱いができるようにします。
その後は、年通算日の値によって1月~12月の振り分けと、日付の計算処理をしています。
関数の呼び出し方
次のように使用します。
Sub convert_doy()
Dim yr As Long: yr = 2021
Dim doyNum As Long: doyNum = 34
Dim rslt As Date
Dim msg As String
rslt = doy2Date(yr, doyNum)
msg = yr & "年の年通算日(" & doyNum & ")の日付は" & vbCrLf & rslt & "です。"
MsgBox (msg)
End Sub
上記のコードを実行すると下記のような結果となります。
引数”yr”と”doyNum”を変更すると、表示される結果が変わります。
コメント