【VBA】期間中の営業日数を求める

期間中の営業日をVBAで求めるにはWorkSheetFunction.NetworkDaysを使用します。

祝日の判定を行うために、事前に祝日の日付をシートに書き込んでおく必要があります。
祝日の情報は内閣府から提供されているcsvファイルの内容をコピーして使用します。

リンク先の 昭和30年(1955年)から令和5年(2023年)国民の祝日(csv形式:20KB) をクリックして
csvファイルをダウンロードします。
シートの名前はholidayとし、データの1行目はヘッダーとしています。

期間中の営業日を求めるコードは以下になります。

 1Option Explicit
 2
 3Public Function GetWorkdays(start_day As Date, end_day As Date) As Long
 4'###################################################################################
 5'stard_day日からend_day間の営業日数を返す
 6'祝日が記載されたシートが必要
 7'-----------------------------------------------------------------------------------
 8'引数  :start_day 開始日
 9'      :end_day    終了日
10'戻り値:営業日数
11'###################################################################################
12  
13  Dim holidaySht As Worksheet
14  Set holidaySht = ThisWorkbook.Worksheets("holiday")
15  
16  Dim lastRow As Long
17  lastRow = GetMaxRowUsedRange(holidaySht)
18  
19  GetWorkdays = Application.WorksheetFunction.NetworkDays(start_day, end_day, holidaySht.Range("A2:A" & lastRow))
20
21  Set holidaySht = Nothing
22  
23End Function
24
25Private Function GetMaxRowUsedRange(sht As Worksheet) As Long
26'###################################################################################
27'シート内の使用されている最終行を取得する
28'-----------------------------------------------------------------------------------
29'引数  :sht       シートオブジェクト
30'戻り値:sht内で使用されている最終行
31'###################################################################################
32  
33  GetMaxRowUsedRange = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
34  
35End Function
36
37Public Sub TestGetWorkDays()
38  
39  Dim days As Long
40  
41  days = GetWorkdays(#8/1/2023#, #8/31/2023#)
42  MsgBox "2023/8/1~2023/8/31の営業日は" & days & "日です。", vbInformation
43  
44  days = GetWorkdays(#9/1/2023#, #9/30/2023#)
45  MsgBox "2023/9/1~2023/9/30の営業日は" & days & "日です。", vbInformation
46  
47End Sub

TestGetWorkDaysを実行すると、2023年8月と9月の営業日数がメッセージボックスで表示されます。

12023/8/1~2023/8/31の営業日は22日です。
22023/9/1~2023/9/30の営業日は20日です。

関連ページ