VBAで日付が平日のみ処理を行いたい場合や、休日・祝日のみ処理を行いたい場合などがあると思います。
そんな時には、休日・祝日判定を行う関数を作っておけば、いろいろな場所で呼び出して使用できるので便利。
なので、とりあえず作ってみた。
祝日を判定する関数
まずは、祝日の判定から。
祝日を判定するには、どこかシートに祝日である日付を一覧化したものを用意しておくと便利。
今回は、「祝日」という名前のシートを作成し、A列に数年先までの祝日の日付を入力した。
作成したシートは、そのシートタブを右クリックし、「非表示」を選択し、見えないようにしておく方がスマートかなと。
で、祝日を判定する関数は以下のようになった。
「祝日」シートのA列を検索して、日付があれば祝日と判定する。
'祝日判定関数 Public Function shukujitu(ByRef hiduke) As Boolean '変数 Dim result As Range '祝日シートを検索 Set result = Sheets("祝日").Range("A1:A3000").Find(What:=hiduke, _ LookAt:=xlWhole) If result Is Nothing Then '日付がない場合、平日 shukujitu = False Else '日付がある場合、祝日 shukujitu = True End If End Function
なお、VBAの関数(Function)は、戻り値が関数名の変数の値となる。
今回の場合は、関数名「shukujitu」の変数「shukujitu」に、戻り値であるTrue/Falseを入れてやる。
休日を判定する関数
続いて、休日を判定する。
休日を判定するには、Weekday関数を使用して、曜日番号を取得し、その番号によって休日かどうかを判定する。
曜日番号は以下のようになっているので、7(土曜日)、1(日曜日)の場合が休日となる。
- 1…日曜日
- 2…月曜日
- 3…火曜日
- 4…水曜日
- 5…木曜日
- 6…金曜日
- 7…土曜日
で、休日を判定する関数は以下のようになった。
'休日判定関数 Public Function kyujitu(ByRef hiduke) As Boolean '変数 Dim youbi As Integer '曜日番号取得 youbi = Weekday(hiduke) Select Case youbi Case 1 '日曜日の場合、休日 kyujitu = True Case 2 '月曜日の場合、平日 kyujitu = False Case 3 '火曜日の場合、平日 kyujitu = False Case 4 '水曜日の場合、平日 kyujitu = False Case 5 '木曜日の場合、平日 kyujitu = False Case 6 '金曜日の場合、平日 kyujitu = False Case 7 '土曜日の場合、休日 kyujitu = True End Select End Function
呼出元
最後に、以下のように祝日判定関数、休日判定関数を呼び出せばOK。
'呼出元 hiduke = Date If shukujitu(hiduke) = True Then '祝日の場合 MsgBox "祝日です。", vbInformation ElseIf kyujitu(hiduke) = True Then '休日の場合 MsgBox "休日です。", vbInformation Else '上記以外(平日)の場合 MsgBox "平日です。", vbInformation End If
コメント