月の末日を求めるにはDateAdd関数を使用します。
月の末日を求めるコード
月の末日を求めるコードは以下になります。
Option Explicit
Sub getMonthLastDay()
Dim dayStr As String
dayStr = InputBox("日付をyyyy/m、またはyyyy/m/dの形式で入力してください。")
If dayStr = "" Then
Exit Sub
End If
If IsDate(dayStr) = False Then
MsgBox "日付をyyyy/m、またはyyyy/m/dの形式で入力してください。", vbCritical
Exit Sub
End If
Dim day As Date
day = CDate(dayStr)
Dim nextMonthFirstDay As Date
nextMonthFirstDay = DateAdd("m", 1, day)
nextMonthFirstDay = CDate(Format(nextMonthFirstDay, "yyyy/mm/") & "1")
Dim lastDay As Date
lastDay = DateAdd("d", -1, nextMonthFirstDay)
MsgBox Format(day, "yyyy/mm") & "月の末日は" & Format(lastDay, "d") & "日です。"
End Sub
コードの解説
dayStr = InputBox("日付をyyyy/m、またはyyyy/m/dの形式で入力してください。")
Inputboxに入力された値がdayStrに代入されます。
If dayStr = "" Then
Exit Sub
End If
Inputboxでキャンセルが押されたときは、空白がdayStrに代入されます。
キャンセルが押されたら処理を中止します。
If IsDate(dayStr) = False Then
MsgBox "日付をyyyy/m、またはyyyy/m/dの形式で入力してください。", vbCritical
Exit Sub
End If
dayStrが日付に変換できないときは、エラーとして処理を中止します。
Dim day As Date
day = CDate(dayStr)
CDate関数を使用して、daystrをDate型に変換してdayに代入します。
Dim nextMonthFirstDay As Date
nextMonthFirstDay = DateAdd("m", 1, day)
nextMonthFirstDay = CDate(Format(nextMonthFirstDay, "yyyy/mm/") & "1")
DateAdd(“m”, 1, day)で入力された次月の日付を戻り値としてnextMonthFirstDayに代入します。
入力値 2018/7/24 → 2018/8/24
CDate(Format(nextMonthFirstDay, “yyyy/mm/”) & “1”)で次月の1日を戻り値として取得し、nextMonthFirstDayに代入します。
2018/8/24 → 2018/8/1
lastDay = DateAdd("d", -1, nextMonthFirstDay)
DateAdd関数を使用して、次月1日の前日を取得します。
2018/8/1→2018/7/31
使用例
コードを実行するとインプットボックスが表示されます。
yyyy/mまたはyyyy/m/dの形式で入力します。例:2018/7, 2018/7/24
入力した月の末日が表示されます。
文字列など、日付として認識できないものを入力するとエラーになります。