VBAで休日・祝日を判定する

VBA
この記事は約3分で読めます。

VBAで休日・祝日判定を行うには
Weekday関数とDictionaryオブジェクトを使用します。
土曜日と日曜日の判定にWeekday関数を使用し
祝日の判定にDictionaryオブジェクトを使用します。

WeekDay関数についてはこちらをご覧ください。

VBAで日付の曜日を取得する
VBAで日付から曜日を取得するにはWeekday関数を使用します。 Weekday関数

 

Dictionaryオブジェクトを使用するには
Microsoft Scripting Runtimeに参照設定を行う必要があります。
参照設定についてはこちらをご覧ください。

VBAで参照設定を行う
VBAに標準で含まれていない機能があるときは 外部のライブラリを参照して、外部ライブラリ内の機能を利用します。 この外部ライブラリの機能を利用する設定を、参照設定と言います。

 

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

国民の祝日について - 内閣府
内閣府 国民の祝日について。国民の祝日に&#38306...

今回はcsvファイルから2021年度の祝日をシートにコピーします。
シートの名前はholidayとし、データの1行目はヘッダーとします。

 

holidayシートの内容をDictionaryオブジェクトに格納して
戻り値として返すコードは以下になります。

 

holidayシートの最終行を取得するためGetMaxRowを使用しています。
GetMaxRowの詳細についてはこちらをご覧ください。

【VBA】最終行・最終列を取得する
for文などで1行目から最終行、または1列目から最終列まで 連続して処理を行いたいときがあります。 この記事では最終行と最終列を取得するVBAのサンプルコードをご紹介します。

 

休日・祝日判断をするコードは以下になります。
休日または祝日のときはTrueを戻り値として返します。
平日のときはFalseを戻り値として返します。

 

祝日の日付が格納してあるdicにdayが存在するか
DictionaryオブジェクトのExistsメソッドを使用して確認しています。
dayがdic内に存在すれば祝日と判定します。

WeekDay関数を使用してdayが土曜日か日曜日か判定しています。
WeekDay関数に日付を入力すると1~7の値を返します。
日曜日は1、土曜日は7なので、WeekDay関数を使用して
1または7のどちらかを取得したときに、休日と判定します。

以上の祝日の判定をOr演算子で結合して休日・祝日の判定をします。

 

TestIsHolidayを動かしてIsHoliday Functionをテストしてみます。

 

2021/7/21は水曜日です。平日なのでFalseとメッセージボックスに表示されます。

 

2021/7/22は祝日(海の日)、2021/7/24は土曜日、2021/7/25は日曜日です。
それぞれ休日・祝日なのでTrueとメッセージボックスに表示されます。

コメント