【VBA入門】指定日が休日かどうかを判定する方法|NetworkDays.Intl関数で柔軟に判別

業務カレンダーに基づいて、「この日が営業日か休日か」を判定したい場面は多くあります。
Excel VBAでは、WorksheetFunction.NetworkDays_Intl 関数を利用することで、任意の曜日や祝日を休日とみなしつつ、1日単位で稼働日判定が可能です。

本記事では、指定された日付に対して、その日が営業日か休日かを1行ずつチェックする方法をご紹介いたします。


目次

コード例:1日ごとの営業日・休日を判定する

Sub CheckHolidayFlag()
    Dim targetCell As Range
    Dim customWeekend As String
    Dim holidayList As Variant

    customWeekend = "0000110"  ' 金曜と土曜を休日扱い
    holidayList = Array(#2025/01/01#, #2025/02/11#, #2025/04/29#)  ' 任意の祝日

    For Each targetCell In Range("B2:B6")
        If WorksheetFunction.NetworkDays_Intl( _
            targetCell.Value, targetCell.Value, customWeekend, holidayList) > 0 Then
            targetCell.Offset(0, 1).Value = "稼働日"
        Else
            targetCell.Offset(0, 1).Value = "休日"
        End If
    Next
End Sub

処理の概要

  • 対象範囲:B2~B6セルに日付が入力されていると想定
  • 判定結果:隣のC列に「稼働日」または「休日」と表示される
  • customWeekend の「0000110」は、金曜と土曜を休日に設定
  • holidayList には任意の祝日を配列で指定可能

NetworkDays.Intlの判定ロジック

WorksheetFunction.NetworkDays_Intl(開始日, 終了日, 休日指定, 祝日配列)
この関数は、指定された期間に何日稼働日があるかを返します。開始日=終了日とすれば、その日が稼働日であれば 1 が返り、休日であれば 0 が返されます。

この性質を利用し、日付ごとに営業日かどうかをチェックすることが可能です。


判定結果の例(C列)

B列(日付)C列(判定結果)
2025/01/01休日
2025/01/03稼働日
2025/01/10休日
2025/01/11休日
2025/01/13稼働日

まとめ|1日単位の営業日チェックにも対応可能

日々のスケジュールや納期管理、月次シフト表の作成など、休日判定は業務の自動化に欠かせない要素です。

  • NetworkDays_Intl 関数を使えば、任意の曜日+祝日を休日と見なせる
  • 開始日=終了日を同じにすることで、1日だけの稼働判定が可能
  • 結果は「稼働日」「休日」などのフラグとして隣接セルに記録できる

このように、VBAを使えば柔軟かつ正確な休日判定が可能です。
独自のカレンダーや業務ルールに沿った自動処理の一環として、ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次