Microsoft Access 掲示板

祝日を含めての許可日について

3 コメント
views
4 フォロー

以前車庫証明許可日が申請日を含めて3日となるため
T-祝日テーブルを作り下記のように関数をhatena様よりご教示いただきました。

その際申請日を含めて3日は普通車であり、管轄署が市内で軽自動車であるならば
申請日を含めて2日となります。

それで素人の浅はかさで
下記のようにクエリーで作成し運用することとしました。
出来上日: IIf(IsNull([申請日]),"",IIf([普軽別]="軽",許可日([申請日])-1,許可日([申請日])))

でも9月19日の申請ならば9月23日に軽自動車の出来上がりとなります。

したがって下記の式について普通車・軽自動車併せてはどう作ればいいのかご教示頂ければありがたいのですが。

Public Function 許可日(申請日 As Variant) As Variant
    Dim 営業日 As Long
    許可日 = 申請日
    If IsNull(許可日) Then Exit Function
    Do
        許可日 = 許可日 + 1
        Select Case Weekday(許可日)
        Case vbMonday To vbFriday
            If IsNull(DLookup("祝日名", "T_祝日", "日付=#" & 許可日 & "#")) Then
                営業日 = 営業日 + 1
            End If
        End Select
    Loop Until 営業日 = 2
End Function
tokinaito
作成: 2019/09/19 (木) 16:11:22
最終更新: 2019/09/20 (金) 11:22:50
通報 ...
1

軽自動車は管轄署が「市内」の場合には2日で、「市外」は3日になるんですよね。
作成したクエリには「管轄署」についての情報はないのですが、そういったデータはございますか?

もし管理しているということであれば、
許可日の引数に「普軽別」と「管轄署」を追加し、
営業日のところで条件分岐をすることで
ご希望の日付を取得することができると思います。

2

許可日関数を下記のように変更してください。

Public Function 許可日(申請日 As Variant, Optional 営業日数 As Long = 3) As Variant
    Dim 営業日 As Long
    許可日 = 申請日
    If IsNull(許可日) Then Exit Function
    Do
        許可日 = 許可日 + 1
        Select Case Weekday(許可日)
        Case vbMonday To vbFriday
            If IsNull(DLookup("祝日名", "T_祝日", "日付=#" & 許可日 & "#")) Then
                営業日 = 営業日 + 1
            End If
        End Select
    Loop Until 営業日 = 営業日数 - 1
End Function

あと、TMGさんの回答のように、テーブルの市外か市内を判断できるフィールドで、条件分けをすればいいでしょう。

出来上日: 許可日([申請日], IIf(軽かつ市内,2,3))

軽かつ市内の部分の条件式はテーブルのフィールド構成が分からないので、適切なの式を考えてください。

3
tokinaito 2019/09/30 (月) 13:27:47 bb5c2@5f550

返事が遅くなり申し訳ありません。おかげさまで希望通りの
結果が得られました。TMGさんhatenさん大変有り難うございました。
hatena様の関数式いつもかっこいいですね。ただどうしてこの関数で
こうなるのかというのを今後勉強していきたいと思います。