Base自分用のナレッジベース。Server、オープンソース系のシステムやフリーソフトに関する情報、iPhone、Androidスマホ便利情報など役立つ情報などを覚書しておくためのブログ。リニューアルされました。リダイレクトされます。AccessのVBAで指定した日付が休日(祝祭日、土日)かどうかを判定するためのユーザー定義関数を作成したので覚書しておく。OSの設定を和暦にしているとうまく動かないとの指摘があったので、和暦対応を追記しました。今回作成したユーザー定義関数の処理ステップを簡単に記載しておきます。VBAのプログラムだけでは祝祭日のチェックはできないので、別途祝祭日を管理するテーブル(holidayテーブル)を用意する。holidayテーブルに祝祭日の日付を入力。祝祭日だけでなく土日以外の休業日(創立記念日など)も入力する。土日以外の会社が休日の日付を入力。作成した関数にチェックしたい日付を引数として渡す。関数側では受け取った引数の日付がholidayテーブルに存在するかをチェックする。存在しない場合は、曜日を調べて土日かどうかをチェックする。祝祭日もしくは、土日にあたる場合はTrueを返し、そうでない場合はFalseを返す。以下に"holidayテーブル"の構造とユーザー定義関数のコードを記述します。祝祭日を管理するテーブルの構造テーブル構造は以下のとおり。注意点holiday_nameフィールドを用意するかどうかは任意。祝祭日名については直接使われることはない。引数として指定する日付は、時刻が指定されているデータ(00:00:00以外)を指定してもよい。テーブル構造の画面ショット以下に作成した"holidays"テーブルのデザイン画面の画面ショットを記載します。テーブルに入力されているデータの画面ショット以下に作成した"holidays"テーブルに2016年の祝祭日を入力した際の画面ショットを記載します。作成するユーザー定義関数のプログラムは以下のとおり。OSのカレンダーの設定が"和暦"の場合エラーが出てきちんと動作しないというコメントをいただいたので、"和暦"の場合でも動作するように修正しました。'土日が休みでない場合は、Caseに指定する数値を該当の曜日を表す数値に変更する。以下に作成したVBAのユーザー関数の使用方法のサンプルを記載する。例2.チェックする日付がフィールド(ここでは例として受注日)の場合CheckHoliday([受注日])指定した日付が休日(祝祭日、土日)かどうかを判定するユーザー定義関数のサンプルプログラムまとめ祝祭日を別のテーブルで管理しないとならないところはちょっと面倒だけど、祝祭日は年ごとに変わるので仕方ないところ。本当はWeb上のサービスをAPIで呼び出して使えたりすると入力する手間も省けるけれど、そういったサービスは見当たらないので...もしかしたらGoogleカレンダーのAPIなんかでできるかもしれませんが、そこまで調べてないです。機会があったら調べてみます。早々にご対応いただきありがとうございました。CheckHoliday関数を「和暦」環境のもとで使用するにはどうすればよろしいでしょうか。コメントありがとうございます。和暦でも正常に動作するように記事中のユーザー関数のプログラムを修正しました。和暦でも西暦でも動作することを確認済みです。21:33CheckHoliday関数を「和暦」環境のもとで使用するにはどうすればよろしいでしょうか。64bit)の「カレンダーの種類」(コントロールパネル→地域と言語→形式→追加の設定→日付→カレンダーで選択)を「和暦」として使用しています。ソフトはOfficeProfessional2010同梱のACCESS2010を使用し、ファイル形式はaccess2007です。この環境の下で、CheckHoliday関数を使用すると、正しく動作しません。27/9/10'の日付の構文エラーです。「和暦」の環境のもとでCheckHoliday関数を使用するにはどうすればよろしいでしょうか。CheckHoliday関数の最後行(23行)のElseの文を教えてください。サンプルコードが中途半端に終わってましたね。記事を書き直しましたので参照ください。(0)トラックバックURLこの記事にトラックバックする(FC2ブログユーザー)前の(古い)記事Excel:MATCH関数とINDEX関数の組み合わせて検索条件に一致した行、列が交差した値を取り出す。端末にAPNが正しく設定されていません。(11/25)プロフィールこのブログの中の人:billyboyこのブログを見に来てくれてありがとうございます。このブログの中の人はExcel、AccessのVBAに関するカスタマーサポート、技術ドキュメントのの作成業務を経験後、開発系SEを経て現在は金融系企業のシステム運用/保守SEとして働いています。当初自分が困ったときに解決した方法や社内/外からの技術的な問い合わせに回答した時に作ったプログラムなどを自分用の備忘録としてこのブログを開設しました。たくさんの方に見に来ていただけてることに気づいてからはなるべく誰が見てもわかるような記事内容にすることを意識して書いています。