【業務効率化】VBAで土日祝を自動判定!営業日計算をスマートに実装する手法

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
見積書の納期回答や支払日の計算など、「土日祝を除いた営業日」を数える作業って、地味にストレスですよね。

カレンダーを確認しながら数えている最中に、祝日の見落としに気づいて計算をやり直すなど、手作業ではミスも発生しやすくなりますよね。

今回は、カレンダーを確認する手間を省き、正確な日付を瞬時に導き出すVBAの営業日計算ロジックについて解説します。

【業務効率化】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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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