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

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

WorksheetFunction.WorkDay関数で解決する

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

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

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

まずは祝日を定義します。今回はA列に入力するものとします。土日については入力する必要はありません。例では、2019年のみとなっていますが、2018年以前や2020年以降について定義しても問題ありません。

画像に alt 属性が指定されていません。ファイル名: image-8.png
Option Explicit

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/08/31は土曜日
    ' 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
                                                                             ' 2019/04/27,28は土日
                                                                             ' 2019/04/29,30は祝日
End Sub