Access VBA:次の営業日(翌営業日)を返すユーザー定義関数

Access VBA:次の営業日(翌営業日)を返すユーザー定義関数

AccessのVBAを使用して指定した日を起点として次の営業日(翌営業日)を返すユーザー定義関数のサンプルプログラムを覚書。

以前書いた「Access VBA:指定した日付がお休み(祝祭日、土日)かどうかをチェックするユーザー定義関数」で作成した休日かどうかを判断するユーザー定義関数のCheckHoliday関数を利用して次の営業日を返すユーザー定義関数を新たに作りました。

ユーザー定義関数を作成する前に必要な準備について

この記事で紹介するユーザー定義関数のサンプルプログラムは、以下の記事で作成した”CheckHoliday”を使用します。

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

必ず上記の記事に記載されている”CheckHoliday”関数を作成するために必要な準備と”CheckHoliday”関数を作成してから紹介するユーザー定義関数のサンプルプログラムを作成してください。

サンプルプログラムの概要

引数として受け取った日から1日ずつ日付を進めていき、休日判定がFalseになった日付を返します。

休日判定をする仕組みについては、以下の記事に詳細を記載していますのでそちらを参照してください。

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

作成するユーザー定義関数

以下にユーザー定義関数のサンプルプログラムを記載します。

AccessのVBAの標準モジュールに記載してください。

作成したユーザー定義関数の使用例

例えば、[日付]というフィールド翌営業日を計算する基になる日付が入っていた場合は以下のようになります。

[日付]フィールドの値が2016/1/8だった場合、結果として2016/1/12が返されます。
※2016/1/11が成人式でお休みのため。

コメント

  1. キャンドル より:

    翌営業日を計算する基になる日付が"日"のみで、"年"と"月"がありません。
    その場合、どのようにすればよいでしょうか?
    例) 給料日 15日
    この給料日の日にちだけを基にして、休祝日であれば翌営業日という感じです。

  2. tetsum より:

    この"15日"という値は、データとしては日付として入っているけど表示形式で日だけしか表示されているのではなく、"15日"っていう文字列で入っているのでしょうか?

  3. キャンドル より:

    そうなります。
    DLOOKUP関数で参照し、定型入力で”日”が表示されている状態です。この部分は不要であれば定型入力を削除することも可能です。
    説明不足で申し訳ありません。

  4. tetsum より:

    返信ありがとうございます。
    "15"は数値として入っているということですね。
    年と月を表す値はどのフィールドにもない状態ですか?
    それとも年と月は別のフィールドに入っていたりしますか?

  5. キャンドル より:

    分かりやすく例えるなら、
    給料日:20日(定型入力:00"日")
    みたいなフィールドが存在し、これとは別に
    2016/4/1 ~ 2016/4/20
    といった計算期間があります。 
    この2016/4/20 の日にちを給料日フィールドから参照したいのですが、2016/4/20 が休祝日であった場合、翌営業日にズレてほしいといったイメージです。
    難しい依頼だと思いますが、知恵を貸してほしいです。

  6. tetsum より:

    以下のように仮定した場合の例です。
    [計算期間開始日]フィールド→給与計算期間の開始日が日付型で入力されている。
    [計算期間終了日]フィールド→給与計算期間の終了日が日付型で入力されている。
    [給料日]フィールド→給料日が数値で入力されている(定型入力:00"日")
    GetNextWorkDay(Year([計算期間開始日]) & "/" & Month([計算期間終了日]) & "/" & [給料日])
    給料日の"年"、"月"に当たる部分を他のフィールドからYear関数とMonth関数で取り出して、給料日の数値の文字列結合して合成した日付を関数の引数に渡しています。
    もし、計算期間の"2016/4/1 ~ 2016/4/20"が1つのフィルドに文字列として入力されているとすると、もう少し複雑な方法になりますが、できないことはないです。
    各フィールドとフィールドに入っている値の具体的な例があると助かります。