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