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
      
  
  
  
  

コメント