メインコンテンツへスキップ
【VBA】月の末日を求める

【VBA】月の末日を求める

·2 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

月の末日を求めるには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関数を使用して、daystrDate型に変換して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

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

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

関連記事

VBAで休日・祝日を判定する
·5 分
Programming VBA
【VBA】引数を渡してファイルを実行する
·1 分
Programming VBA
【VBA】迷路を解く
··6 分
Programming VBA アルゴリズム