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

 

休日・祝日判断をするコードは以下になります。
休日または祝日のときは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とメッセージボックスに表示されます。

コメント