【EXCEL VBA】n営業日後の日付を知りたい

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

WorksheetFunction.WorkDay関数で解決する

WorksheetFunction.WorkDay関数を利用することで、土日を除いたn日後の日付を求めることができます。しかし、祝日や夏季休暇などが考慮されないためn営業日後の日付を知ることはできません。しかし、第3引数に祝日や夏季休暇を指定することで、n営業日後の日付を求めることができます。

似たような関数に WorksheetFunction.NetworkDays関数がありますが違いは以下となります。

WorksheetFunction.WorkDayn営業日後の日付を求める
WorksheetFunction.NetworkDays営業日の日数を求める

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

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

以下のコードでn営業日後の日付を取得することができます。WorksheetFunction.WorkDay関数を利用することがポイントです。

Sub sample()

    Dim sDate As String: sDate = "2019/8/2" '金曜日の翌営業日を求める

    Debug.Print WorksheetFunction.WorkDay(sDate, 1, Range("a:a"))           ' 43682
    
    ' WorkDay関数はSerialが返却されるので、CDateでDate型に変換する
    Debug.Print CDate(WorksheetFunction.WorkDay(sDate, 1, Range("a:a")))    ' 2019/08/05
  
  
    sDate = "2019/8/9" '2営業日後を求める。ただし8/10~8/16は夏季休暇。8/17,18は土日。
    
    Debug.Print WorksheetFunction.WorkDay(sDate, 2, Range("a:a"))           ' 43697
    
    ' WorkDay関数はSerialが返却されるので、CDateでDate型に変換する
    Debug.Print CDate(WorksheetFunction.WorkDay(sDate, 2, Range("a:a")))    ' 2019/08/20

End Sub

コメント

  1. […] 【EXCEL VBA】n営業日後の日付を知りたいn営業日後の日付を取得する方法です。営業日は個々に異なるため、個別に定義が必要となります。今回は、デフォルトで土日休み、祝日などを […]