企業研修講師派遣のBESTグループ
出張パソコン教室ITスクール
webコンサルティングスクール
パソコンの家庭教師BEST

Home Excel(エクセル) ユーザー定義関数を使う

Q.Excelでスケジュール管理などを行っていて、日程が休日かどうかを判定するのにWEEKDAY関数を使っていますが、これだと祝日や会社の創立記念日などの休日が判定できません。何か良い方法はありませんか?

A.ユーザー定義関数で、休日かどうかを判定する関数を作成しましょう。

Excelでは、VBAのFunctionを、Excelのワークシートで使うことができます。これをワークシート関数に対して、「ユーザー定義関数」と呼んだりします。まずは下記のコードを「標準モジュール」の関数(Function)として作成して下さい。

Function IsNonWorkDay(d As Date)

IsNonWorkDay = False

If WorksheetFunction.Weekday(d) = 1 _
Or WorksheetFunction.Weekday(d) = 7 Then ‘★土日の判定
IsNonWorkDay = True
Else
If Month(d) = 4 And Day(d) = 1 Then ‘★創立記念日
IsNonWorkDay = True
End If
End If

End Function
これでユーザー定義関数「IsNonWorkDay」ができました。先にこの関数のコードを説明しましょう。まず、この関数は何もなければFALSEつまり休日でないとの結果を返します。この後のIF分では、休日となる条件を判定し、その場合にこの関数の戻り値をTRUEすなわち休日として返すような作りになっています。ひとつめの★部分で、ワークシート関数のWeekdayを使用して、この値が1(日曜日)または7(土曜日)の場合にTrue(つまり休日と判定する)を返します。もしここで休日でなければ、次の★の部分の処理で、土日以外の休日判定をします。この例では、4月1日が会社の創立記念日で休日と判定されるようになっています。この後に、例えば国民の休日の日付などを追加することで、IsNonWorkDay関数で全ての休日を判定できるように処理することができます。

さてこのIsNonWorkDay関数は、ワークシートのセル上で、普通のワークシート関数と同じように使用できます。試しにA1セルに任意の日付を入力し、A2セルに =IsNonWorkDay(A1) を入力してみましょう。TRUEと表示されれば休日、FALSEと表示されれば休日ではありませんが、期待した結果になっていたことと思います。
このように、ユーザー定義関数を使うことで、セルの式がすっきりするというメリットがあります。ただし、逆のデメリットとしては、自分で作ったユーザー定義関数の入ったシートは、きちんと説明しないと、別の人が使う場合にかえってわかりにくかったりします。
その点を踏まえて、状況に応じて便利に使っていきましょう。

ご質問や感想は上記からコメントをお願い致します

返信を残す