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



コメント