【EXCEL VBA】月末の最終営業日を取得したい

月末の最終営業日を取得する方法です。営業日は個々に異なるため、個別に祝日等の定義が必要となります。今回は、デフォルトで土日休み、祝日などを個別定義する前提で、月末の最終営業日を取得する方法を記載します。

WorksheetFunction.WorkDay関数で解決する

WorksheetFunction.WorkDay関数の細かい仕様については、こちらの記事を参照してください。

WorksheetFunction.WorkDay関数には、負の数を渡す事ができます。月末の最終営業日を取得したい月の翌月初日から「-1」営業日することで月末の最終営業日を取得します。

サンプルプログラムを確認する(コピペOK)

まずは土日以外の休みを定義します。今回はA列に入力するものとします。土日については入力する必要はありません(入力しても良いです)。例では、2019年のみですが、2020年以降の未来、2018年以前の過去日を定義しても問題ありません。

画像に alt 属性が指定されていません。ファイル名: image-8.png
Sub sample()
    ' 2019年8月の最終営業日を求めたい
    Dim sDate As String: sDate = "2019/9/1" ' 最終営業日を求めたい月の翌月初日を指定する

    Debug.Print WorksheetFunction.WorkDay(sDate, 1, Range("a:a"))           ' 43710
    
    ' WorkDay関数はSerialが返却されるので、CDateでDate型に変換する
    Debug.Print CDate(WorksheetFunction.WorkDay(sDate, -1, Range("a:a")))    ' 2019/08/30
  
    ' 2019年4月の最終営業日を求めたい
    sDate = "2019/5/1" ' 最終営業日を求めたい月の翌月初日を指定する
    
    Debug.Print WorksheetFunction.WorkDay(sDate, -1, Range("a:a"))           ' 43581
    
    ' WorkDay関数はSerialが返却されるので、CDateでDate型に変換する
    Debug.Print CDate(WorksheetFunction.WorkDay(sDate, -1, Range("a:a")))    ' 2019/04/26

End Sub

タイトルとURLをコピーしました