メインコンテンツへスキップ
【VBA】期間中の営業日数を求める

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

·2 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。

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

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

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

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

Option Explicit

Public Function GetWorkdays(start_day As Date, end_day As Date) As Long
'###################################################################################
'stard_day日からend_day間の営業日数を返す
'祝日が記載されたシートが必要
'-----------------------------------------------------------------------------------
'引数  :start_day 開始日
'      :end_day    終了日
'戻り値:営業日数
'###################################################################################
  
  Dim holidaySht As Worksheet
  Set holidaySht = ThisWorkbook.Worksheets("holiday")
  
  Dim lastRow As Long
  lastRow = GetMaxRowUsedRange(holidaySht)
  
  GetWorkdays = Application.WorksheetFunction.NetworkDays(start_day, end_day, holidaySht.Range("A2:A" & lastRow))

  Set holidaySht = Nothing
  
End Function

Private Function GetMaxRowUsedRange(sht As Worksheet) As Long
'###################################################################################
'シート内の使用されている最終行を取得する
'-----------------------------------------------------------------------------------
'引数  :sht       シートオブジェクト
'戻り値:sht内で使用されている最終行
'###################################################################################
  
  GetMaxRowUsedRange = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
  
End Function

Public Sub TestGetWorkDays()
  
  Dim days As Long
  
  days = GetWorkdays(#8/1/2023#, #8/31/2023#)
  MsgBox "2023/8/1~2023/8/31の営業日は" & days & "日です。", vbInformation
  
  days = GetWorkdays(#9/1/2023#, #9/30/2023#)
  MsgBox "2023/9/1~2023/9/30の営業日は" & days & "日です。", vbInformation
  
End Sub

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

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

関連記事

VBAでcontinue文
·1 分
Programming VBA
VBAの予約語をまとめました
·2 分
Programming VBA
【VBA】スタックを実装する
·5 分
Programming VBA