これらの関数はクエリーや、モジュールで呼び出すことが出来ます。
継ぎ足ししてきたので、古い書き方もありますが、ご容赦ください。
日付関連関数 Accessモジュール
月末の計算
Public Function LastOfMon(pDate As Variant) As Variant ' 引数の日付が属する月度の最後の日付を返す' Dim DayWork As Date If IsNull(pDate) Then LastOfMon = Null Exit Function End If DayWork = DateSerial(Year(pDate), Month(pDate), 1) LastOfMon = DateAdd("m", 1, DayWork) - 1 End Function
続いてDayWork に1ヶ月足して翌月の1日を出し、そこからー1日すると月末となります
請求日の計算
Public Function Seikyubi(DenDay, Sime) As Date If IsNull(Sime) Then Sime = 0 If Sime = 31 Then Seikyubi = LastOfMon(DenDay) ElseIf Sime = 0 Then Seikyubi = DenDay ElseIf Sime > 31 Then Seikyubi = DenDay Else Seikyubi = DateValue(Format$(DateAdd("m", 1, DenDay) - Sime, "yyyy/mm/") & Sime) End If End Function
締め日が月末であれば当月末日をセット、0や31日(末日)以外は当日をセット
20日や15日などのそれ以外の日は、
- 伝票日付に1ヶ月を足す
- そこから締め日の日数を引く< br /> これで、当月の締め日前なのか翌月分なのかが決定
- 上記年月に締め日を足して日付とする
締め日が複数の場合の請求日
といった複雑な場合もあります。
当社のお客様、花の仲卸様でのカスタマイズ、関数ではありません。
Private Sub SetSeikyubi() Dim WorkSime As Integer, Wday As Integer, Wtuki As Integer WorkSime = Day(Me![伝票日付]) If Me![締め日1] = 0 Then Wday = Day(Me![伝票日付]) Wtuki = 0 End If If WorkSime <= Me![締め日1] Then If Me![締め日1] = 31 Then Wday = Day(LastOfMon(Me![伝票日付])) Else Wday = Me![締め日1] End If Wtuki = 0 ElseIf WorkSime <= Me![締め日2] Then If Me![締め日2] = 31 Then Wday = Day(LastOfMon(Me![伝票日付])) Else Wday = Me![締め日2] End If Wtuki = 0 ElseIf WorkSime <= Me![締め日3] Then If Me![締め日3] = 31 Then Wday = Day(LastOfMon(Me![伝票日付])) Else Wday = Me![締め日3] End If Wtuki = 0 ElseIf Me![締め日2] = 0 Then '締め日が1つの場合 Wday = Me![締め日1] Wtuki = 1 ElseIf Me![締め日3] = 0 Then '締め日が1つの場合 Wday = Me![締め日1] Wtuki = 1 End If Me![請求日] = DateValue(Format$(DateAdd("m", Wtuki, Me![伝票日付]), "yyyy/mm/") & Wday) End Sub
週締め(毎週金曜とか)
Private Sub Syujime() '週締めの処理 Dim NouhinYoubi As Integer, Wday As Integer NouhinYoubi = Weekday(Me![伝票日付]) If Me![曜日] < NouhinYoubi Then ' 翌週の締め Wday = Me![曜日] + (7 - NouhinYoubi) Me![請求日] = DateAdd("d", Wday, Me![伝票日付]) ElseIf Me![曜日] = NouhinYoubi Then '当日締め Me![請求日] = Me![伝票日付] Else Wday = Me![曜日] - NouhinYoubi Me![請求日] = DateAdd("d", Wday, Me![伝票日付]) End If End Sub下記は、システム日付から先月の1日と先月末を計算しています
帳票印刷画面での、初期値に利用してます。
Public Function Zengetu1() As Date 'システム日付の1ヶ月前の1日を返す Dim DayWork As Date DayWork = DateAdd("m", -1, Date) Zengetu1 = DateSerial(Year(DayWork), Month(DayWork), 1) End Function Public Function Zengetu31() As Date 'システム日付の1ヶ月前の末日を返す Dim DayWork As Date DayWork = DateSerial(Year(Date), Month(Date), 1) Zengetu31 = DateAdd("d", -1, DayWork) End Function
0 件のコメント :
コメントを投稿