期間中の営業日をVBAで求めるには
WorkSheetFunction.NetworkDaysを使用します。
祝日の判定を行うために、事前に祝日の日付を
シートに書き込んでおく必要があります。
今回は2018年度の祝日をシートに書き込んでおきます。
祝日 | 祝日名 |
2018/1/1 | 元日 |
2018/1/2 | 年始休日 |
2018/1/3 | 年始休日 |
2018/1/8 | 成人の日 |
2018/2/11 | 建国記念の日 |
2018/2/12 | 振替休日 |
2018/3/21 | 春分の日 |
2018/4/29 | 昭和の日 |
2018/4/30 | 振替休日 |
2018/5/3 | 憲法記念日 |
2018/5/4 | みどりの日 |
2018/5/5 | こどもの日 |
2018/7/16 | 海の日 |
2018/8/11 | 山の日 |
2018/9/17 | 敬老の日 |
2018/9/23 | 秋分の日 |
2018/9/24 | 振替休日 |
2018/10/8 | 体育の日 |
2018/11/3 | 文化の日 |
2018/11/23 | 勤労感謝の日 |
2018/12/23 | 天皇誕生日 |
2018/12/24 | 振替休日 |
2018/12/29 | 年末休日 |
2018/12/30 | 年末休日 |
2018/12/31 | 年末休日 |
シートの名前はholidayとし、データの1行目はヘッダーとします。
期間中の営業日を求めるコードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Option Explicit Function getWorkdays(startDay As Date, endDay As Date) As Long '################################################################################### 'stardDay日からendDay間の営業日数を返す '祝日が記載されたシートが必要 '----------------------------------------------------------------------------------- '引数 :startDay 掲載開始日 ' :endDay 計算終了日 '戻り値:営業日数 '################################################################################### Dim holidaySht As Worksheet Set holidaySht = ThisWorkbook.Worksheets("holiday") Dim lastRow As Long lastRow = getMaxRow(holidaySht, 1) getWorkdays = Application.WorksheetFunction.NetworkDays(startDay, endDay, holidaySht.Range("A2:A" & lastRow)) Set holidaySht = Nothing End Function Function getMaxRow(sht As Worksheet, targetCol As Long) As Long getMaxRow = sht.Cells(sht.Rows.Count, targetCol).End(xlUp).Row End Function |
holidayシートの最終行を取得するためgetMaxRowを使用しています。
getMaxRowの詳細についてはこちらをご覧ください。

【VBA】最終行と最終列を取得する
for文などで1行目から最終行、または1列目から最終列まで連続して処理を行いたいときがあります。
この記事では最終行と最終列を取得するVBAのサンプルコードをご紹介します。
A列に5行目までデータが入力されています。
1行目にF列...
7月と9月の営業日数を求めてみます。
テストコードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 |
Sub test_getWorkDays() Dim days As Long days = getWorkdays(#7/1/2018#, #7/31/2018#) MsgBox "2018/7/1~2018/7/31の営業日は" & days & "日です。" days = getWorkdays(#9/1/2018#, #9/30/2018#) MsgBox "2018/9/1~2018/9/30の営業日は" & days & "日です。" End Sub |
5 |
days = getWorkdays(#7/1/2018#, #7/31/2018#) |
getWorkdaysの最初の引数に営業日数を求めたい期間の開始日を入力します。
getWorkdaysの2番目の引数に営業日数を求めたい期間の終了日を入力します。
テストコードを実行すると7月と9月の営業日が表示されます。
コメント