Microsoft Access 掲示板

土日及び祝祭日を除いた月初めの出し方について

3 コメント
views
4 フォロー

質問です。よろしくお願いします。
請求日が翌日の月初めと決まっております。
したがって下記①の式により月初めを出しているんですが、月初めが土曜日曜あるいは
祝日の場合はそれを避けて平日としております。しかし下記の式は土曜日曜祝祭日は
考慮していません。
したがってやむを得ず下記②の式により出しています。

①月初: IIf([申請日_]="月日","",IIf([月]=12,#2017/01/04#,DateSerial(Year([申請日]),Month([申請日])+1,1)))


Public Function 月初(申請日)
If 申請日 >= #1/1/2019# And 申請日 <= #1/31/2019# Then
    月初 = "平成31年2月1日"
ElseIf 申請日 >= #2/1/2019# And 申請日 <= #2/28/2019# Then
    月初 = "平成31年3月1日"
ElseIf 申請日 >= #3/1/2019# And 申請日 <= #3/31/2019# Then
    月初 = "平成31年4月1日"
ElseIf 申請日 >= #4/1/2019# And 申請日 <= #4/30/2019# Then
    月初 = "令和1年5月7日"
ElseIf 申請日 >= #5/1/2019# And 申請日 <= #5/31/2019# Then
    月初 = "令和1年6月3日"
ElseIf 申請日 >= #6/1/2019# And 申請日 <= #6/30/2019# Then
    月初 = "令和1年7月1日"
ElseIf 申請日 >= #7/1/2019# And 申請日 <= #7/31/2019# Then
    月初 = "令和1年8月1日"
ElseIf 申請日 >= #8/1/2019# And 申請日 <= #8/31/2019# Then
    月初 = "令和1年9月2日"
ElseIf 申請日 >= #9/1/2019# And 申請日 <= #9/30/2019# Then
    月初 = "令和1年10月1日"
ElseIf 申請日 >= #10/1/2019# And 申請日 <= #10/31/2019# Then
    月初 = "令和1年11月1日"
ElseIf 申請日 >= #11/1/2019# And 申請日 <= #11/30/2019# Then
    月初 = "令和1年12月2日"
ElseIf 申請日 >= #12/1/2019# And 申請日 <= #12/31/2019# Then
    月初 = "令和2年1月6日"
End If
End Functio

Hatena様からご教示いただいた式を参考を活用できないかと自己関数にチャレンジしているんですが
うまくいきません。よろしくご教示ください。

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/10/06 (日) 09:48:58
通報 ...
1

下記でどうでしょうか。

Public Function 月初(申請日 As Variant) As Variant

    If IsNull(申請日) Then Exit Function

    月初 = DateSerial(Year([申請日]),Month([申請日])+1,1)

    Do 
        Select Case Weekday(月初)
        Case vbMonday To vbFriday
            If IsNull(DLookup("祝日名", "T_祝日", "日付=#" & 許可日 & "#")) Then
                Exit Do
            End If
        End Select
        月初 = 月初 + 1
    Loop 
End Function
2
tokinaito 2019/10/08 (火) 11:15:19 bb5c2@5f550

hatena様大変有り難うございました。
考え方としては次の通りでよろしいんでしょうか?

Public Function 月初(申請日 As Variant) As Variant
    If IsNull(申請日) Then Exit Function
'申請日がNULLなら関数は終わり
    月初 = DateSerial(Year([申請日]), Month([申請日]) + 1, 1)
'月初めが出る
    Do
        Select Case Weekday(月初)
        Case vbMonday To vbFriday
            If IsNull(DLookup("祝日名", "T_祝日", "日付=#" & 許可日 & "#")) Then
                Exit Do
            End If
        End Select
        月初 = 月初 + 1
    Loop
'  月初めが月曜から金曜の間で祝祭日がNULLならD0文が修了。土日はNULLじゃないから終了しない
  終了するまで月初に1日プラスする。
End Function

3

だいたいあってます。