業務カレンダーに基づいて、「この日が営業日か休日か」を判定したい場面は多くあります。
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を使えば柔軟かつ正確な休日判定が可能です。
独自のカレンダーや業務ルールに沿った自動処理の一環として、ぜひ活用してみてください。