こんにちは!ぐーです。
見積書の納期回答や支払日の計算など、「土日祝を除いた営業日」を数える作業って、地味にストレスですよね。
カレンダーを確認しながら数えている最中に、祝日の見落としに気づいて計算をやり直すなど、手作業ではミスも発生しやすくなりますよね。
今回は、カレンダーを確認する手間を省き、正確な日付を瞬時に導き出すVBAの営業日計算ロジックについて解説します。
実装のポイント:2つのステップ
VBAで営業日を計算するベストな方法は、Excelの標準関数であるWorkDayをVBAから呼び出す手法です。自力でループ処理を記述するよりも処理が高速になり、コード自体も非常にシンプルになります。
ステップ1:祝日リストの作成
まず、シート名を「祝日設定」としたシートのA列に、対象となる祝日の日付を入力します。
内閣府のホームページなどで公開されている公的なCSVデータを活用すると、入力漏れを防ぐことができ確実です。
ステップ2:コピペでで利用可能なVBAコード
以下のコードを標準モジュールに貼り付けてください。
'--------------------------------------------------
' 機能:指定した日から「○営業日後」の日付を返す
' 引数:startDate = 開始日, daysCount = 何営業日後か
'--------------------------------------------------
Function GetBusinessDay(startDate As Date, daysCount As Integer) As Date
Dim ws As Worksheet
Dim holidayRange As Range
' 1. 祝日リストがあるシートを指定
On Error Resume Next
Set ws = ThisWorkbook.Sheets("祝日設定")
On Error GoTo 0
If ws Is Nothing Then
MsgBox "「祝日設定」シートが見つかりません。土日のみで計算します。"
Set holidayRange = Nothing
Else
' A列のデータを祝日範囲として取得
Set holidayRange = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
End If
' 2. ExcelのWorkDay関数をVBAで呼び出す
' 引数:(開始日, 進める日数, 祝日の範囲)
GetBusinessDay = WorksheetFunction.WorkDay(startDate, daysCount, holidayRange)
End Function
' テスト用実行プログラム
Sub Test_営業日計算()
Dim targetDate As Date
' 今日の3営業日後を計算
targetDate = GetBusinessDay(Date, 3)
MsgBox "今日から3営業日後は " & Format(targetDate, "yyyy/mm/dd") & " です!"
End Sub
コードの活用ポイント
一般的にVBAで営業日を算出する場合、1日ずつ日付を進めながらWeekday関数でチェックを行うループ処理が必要になります。
ですが、Excelには土日や任意の祝日を除外して計算を行えるWorkDay関数があらかじめ備わっています。この既存機能をWorksheetFunction経由で利用することで、複雑なロジックを自作することなく、正確な計算が可能になります。
ぜひ試してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク


コメント