n営業日後の日付を取得する方法です。営業日は個々に異なるため、個別に定義が必要となります。今回は、デフォルトで土日休み、祝日などを個別定義する前提で、n営業日後の日付を取得する方法を記載します。
WorksheetFunction.WorkDay関数で解決する
WorksheetFunction.WorkDay関数を利用することで、土日を除いたn日後の日付を求めることができます。しかし、祝日や夏季休暇などが考慮されないためn営業日後の日付を知ることはできません。しかし、第3引数に祝日や夏季休暇を指定することで、n営業日後の日付を求めることができます。
似たような関数に WorksheetFunction.NetworkDays関数がありますが違いは以下となります。
WorksheetFunction.WorkDay | n営業日後の日付を求める |
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
コメント
[…] 【EXCEL VBA】n営業日後の日付を知りたいn営業日後の日付を取得する方法です。営業日は個々に異なるため、個別に定義が必要となります。今回は、デフォルトで土日休み、祝日などを […]