VBAで休日・祝日判定を行う関数を自作する

Programming プログラミング

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

コメント

タイトルとURLをコピーしました