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