月の末日を求めるには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
入力した月の末日が表示されます。
文字列など、日付として認識できないものを入力するとエラーになります。