【VBA】月の末日を求める
月の末日を求めるにはDateAdd関数を使用します。
コードと解説
コード
月の末日を求めるコードは以下になります。
1Option Explicit
2Sub getMonthLastDay()
3
4 Dim dayStr As String
5 dayStr = InputBox("日付をyyyy/m、またはyyyy/m/dの形式で入力してください。")
6 If dayStr = "" Then
7 Exit Sub
8 End If
9 If IsDate(dayStr) = False Then
10 MsgBox "日付をyyyy/m、またはyyyy/m/dの形式で入力してください。", vbCritical
11 Exit Sub
12 End If
13
14 Dim day As Date
15 day = CDate(dayStr)
16
17 Dim nextMonthFirstDay As Date
18 nextMonthFirstDay = DateAdd("m", 1, day)
19 nextMonthFirstDay = CDate(Format(nextMonthFirstDay, "yyyy/mm/") & "1")
20
21 Dim lastDay As Date
22 lastDay = DateAdd("d", -1, nextMonthFirstDay)
23
24 MsgBox Format(day, "yyyy/mm") & "月の末日は" & Format(lastDay, "d") & "日です。"
25
26End Sub
コードの解説
1dayStr = InputBox("日付をyyyy/m、またはyyyy/m/dの形式で入力してください。")
Inputboxに入力された値がString型でdayStrに代入されます。
1If dayStr = "" Then
2 Exit Sub
3End If
Inputboxでキャンセルが押されたときは、空白がdaystrに代入されます。
キャンセルが押されたら処理を中止します。
1If IsDate(dayStr) = False Then
2 MsgBox "日付をyyyy/m、またはyyyy/m/dの形式で入力してください。", vbCritical
3 Exit Sub
4End If
dayStrが日付に変換できないときは、エラーとして処理を中止します。
1Dim day As Date
2day = CDate(dayStr)
CDate関数を使用して、daystrをDate型に変換してdayに代入します。
1Dim nextMonthFirstDay As Date
2nextMonthFirstDay = DateAdd("m", 1, day)
3nextMonthFirstDay = 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
1lastDay = DateAdd("d", -1, nextMonthFirstDay)
DateAdd関数を使用して、次月1日の前日を取得します。
2018/8/1→2018/7/31
使用例
コードを実行するとインプットボックスが表示されます。
yyyy/mまたはyyyy/m/dの形式で入力します。例:2018/7, 2018/7/24


入力した月の末日が表示されます。

文字列など、日付として認識できないものを入力するとエラーになります。

