年通算日から日付を取得する関数です。
年通算日から日付を取得する必要があったので作成しました。
コピペすればそのまま使用できます。参考にしてみてください。
年通算日から日付を取得する関数の概要
引数に年、年通算日を与えると、日付を返す自作関数です。
《書式》
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”を変更すると、表示される結果が変わります。


 
  
  
  
  

コメント