Access VBA:指定した日付が休日(祝祭日、土日)かどうかをチェックするユーザー定義関数

Access VBA:指定した日付が休日(祝祭日、土日)かどうかをチェックするユーザー定義関数

AccessのVBAで指定した日付が休日(祝祭日、土日)かどうかを判定するためのユーザー定義関数を作成したので覚書しておく。

OSの設定を和暦にしているとうまく動かないとの指摘があったので、和暦対応を追記しました。

作成するVBAのユーザー定義関数の処理概要

今回作成したユーザー定義関数の処理ステップを簡単に記載しておきます。

  1. VBAのプログラムだけでは祝祭日のチェックはできないので、別途祝祭日を管理するテーブル(holidayテーブル)を用意する
  2. holidayテーブルに祝祭日の日付を入力
  3. 祝祭日だけでなく土日以外の休業日(創立記念日など)も入力する
  4. 作成した関数にチェックしたい日付を引数として渡す
  5. 関数側では受け取った引数の日付がholidayテーブルに存在するかをチェックする
  6. 存在しない場合は、曜日を調べて土日かどうかをチェックする
  7. 祝祭日もしくは、土日にあたる場合はTrueを返し、そうでない場合はFalseを返す

以下に”holidayテーブル”の構造とユーザー定義関数のコードを記述します。

祝祭日を管理するテーブルの構造

テーブル構造は以下のとおり。

テーブル名:holiday

フィールド名データ型入力する値
holiday日付/時刻祝祭日の日付
holiday_name短いテキスト祝祭日名

注意点

holiday_nameフィールドを用意するかどうかは任意。

祝祭日名については直接使われることはない。

引数として指定する日付は、時刻が指定されているデータ(00:00:00以外)を指定してもよい。

テーブル構造の画面ショット

以下に作成した”holidays”テーブルのデザイン画面の画面ショットを記載します。

祝祭日データ入力例

テーブルに入力されているデータの画面ショット

以下に作成した”holidays”テーブルに2016年の祝祭日を入力した際の画面ショットを記載します。

祝祭日データ入力例

土日祝祭日かを判定するVBAのユーザー定義関数

作成するユーザー定義関数のプログラムは以下のとおり。

OSのカレンダーの設定が”和暦”の場合エラーが出てきちんと動作しないというコメントをいただいたので、”和暦”の場合でも動作するように修正しました。

関数の呼び出し方法

以下に作成したVBAのユーザー関数の使用方法のサンプルを記載する。

例1.

例2.

チェックする日付がフィールド(ここでは例として受注日)の場合

指定した日付が休日(祝祭日、土日)かどうかを判定するユーザー定義関数のサンプルプログラムまとめ

祝祭日を別のテーブルで管理しないとならないところはちょっと面倒だけど、祝祭日は年ごとに変わるので仕方ないところ。

本当はWeb上のサービスをAPIで呼び出して使えたりすると入力する手間も省けるけれど、そういったサービスは見当たらないので…

もしかしたらGoogleカレンダーのAPIなんかでできるかもしれませんが、そこまで調べてないです。

機会があったら調べてみます。

コメント

  1. akihito_hoshino より:

    CheckHoliday関数の最後行(23行)のElseの文を教えてください。

    • るーと るーと より:

      > CheckHoliday関数の最後行(23行)のElseの文を教えてください。
      サンプルコードが中途半端に終わってましたね。
      記事を書き直しましたので参照ください。

  2. 矢萩 修 より:

     ゆえあって、OS(WIN7 64bit)の「カレンダーの種類」(コントロールパネル→地域と言語→形式→追加の設定→日付→カレンダーで選択)を「和暦」として使用しています。ソフトはOfficeProfessional2010同梱のACCESS2010を使用し、ファイル形式はaccess2007です。
     この環境の下で、CheckHoliday関数を使用すると、正しく動作しません。ちなみに、引数を本日(#15/10/9#)で指定して実行すると、「実行時エラー’3075′ クエリ式’holiday = #平 27/9/10’の日付の構文エラーです。」と表示されます。
    「和暦」の環境のもとでCheckHoliday関数を使用するにはどうすればよろしいでしょうか。

    • るーと るーと より:

      コメントありがとうございます。
      和暦でも正常に動作するように記事中のユーザー関数のプログラムを修正しました。
      和暦でも西暦でも動作することを確認済みです。

  3. 矢萩 修 より:

    billyboy 様
    早々にご対応いただきありがとうございました。