燈明ブログ

現状は小池啓仁の応援ブログ

末日を求めるには

月の末日を求めるには、うるう年の計算とかで、結構やっかいです。
そこで、IsDate関数を使って末日を31日からデクリメントして求めていけば、うるう年の計算を考慮しないで済むわけです。

Private Sub Command1_Click()
     Dim strMatujitu As String
     
     strMatujitu = GetMatujitu(Now)
End Sub
Public Function GetMatujitu(MyDate As String) As String
     Dim strWkDate    As String
     Dim vntMatubi    As Variant
     
     strWkDate = Year(MyDate) & "/" & Format(Month(MyDate), "00") & "/31"
     vntMatubi = 30
     '日付として認識できるまで繰り返す
     Do While Not IsDate(strWkDate)
          strWkDate = Year(MyDate) & "/" & Format(Month(MyDate), "00") & "/" & vntMatubi
          
          '1日前にする
          vntMatubi = vntMatubi - 1
     Loop
     GetMatujitu = strWkDate
End Function

尚、日にちのデクリメントには、DateAdd関数が使えそうですが、存在しない日をDateAdd関数の第3引数に渡すとエラーとなりました。