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

VBA

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

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

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

 

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

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

 

祝日の判定を行うには、事前に祝日の日付をシートに書き込んでおく必要があります。
今回は2018年度の祝日をシートに書き込んでおきます。
シートの名前はholidayとし、データの1行目はヘッダーとします。

 

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

 

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

【VBA】最終行・最終列を取得する
VBAでシートの最終行と最終列を取得するコードのサンプルです。最終行と最終列を取得することにより、for文のループ処理を行うことができます。

 

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

 

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

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

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

 

test_isHolidayを動かしてisHoliday Functionをテストしてみます。

 

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

 

2018/7/14は土曜日、2018/7/15は日曜日、2018/7/16は海の日です。
それぞれ休日・祝日なのでTrueとメッセージボックスに表示されます。

コメント