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

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

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

事前準備

祝日の判定を行うには、事前に祝日の日付をシートに書き込んでおく必要があります。
祝日は内閣府から提供されているcsvファイルの内容をコピーして使用します。
リンク先の昭和30年(1955年)から令和5年(2023年)国民の祝日(csv形式:20KB)をクリックして
csvファイルをダウンロードします。

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

csvファイルから2023年度の祝日をコピーしてExcelシートに貼り付けます。
シートの名前はholidayとし、データの1行目はヘッダーとします。

 

土日・祝日の判定を行うコード

コード全体

土日・祝日のコード全体は下記になります。
動作させるためにはMicrosoft Scripting Runtimeに参照設定を行う必要があります。
参照設定についてはこちらをご覧ください。
一番上のTestIsHoliday()を動かすと、2023/1/6(金)~2023/1/9(月・祝)の土日・祝日判定を行います。

2023/1/6は金曜日です。平日なので「2023/01/06は平日です」とメッセージボックスに表示されます。

2023/1/7は土曜日、2023/1/8は日曜日、2023/1/9は祝日(成人の日)です。
それぞれ「土日祝日です」とメッセージボックスに表示されます。

コードの解説

StoreHolidaysToDictionary

holidayシートの内容をDictionaryオブジェクトに格納して、戻り値として返すコードは以下になります。Dictionaryオブジェクトを使用するには、Microsoft Scripting Runtimeに参照設定を行う必要があります。
参照設定についてはこちらをご覧ください。

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

IsHoliday

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

祝日の判別にはDictionaryを使用しています。
祝日の日付が格納してあるDictionaryに日付が存在するか、DictionaryのExistsメソッドを使用して
確認しています。日付がDictionary内に存在すれば祝日と判定します。

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

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

 

コメント