Microsoft Access 掲示板

営業日数 / 1

9 コメント
views
1
hiroton 2025/08/21 (木) 10:09:05 4750b@f966d

今日を求める関数: Date()
日付から日部分を求める関数: Day()
今日の日の部分を求める計算式: Day(Date())

月曜日が定休日なので

当月において、「今日」までの定休日の日数を数える計算式: DateDiff("ww",Date()-Day(Date()),Date(),vbMonday)
※DateDiff関数を使って、先月末日から該当曜日(月曜日)を何回跨いだか?を計算します

定休日を除いた日数: Day(Date())-DateDiff("ww",Date()-Day(Date()),Date(),vbMonday)

しかし万が一8月3日(日)を臨時休業としてた場合は、8月5日(火)の日報入力フォームは3と表示させたいです。

このような情報は余人の知るところではないので、目的に合わせたデータが必要です。例えば「T_臨時休業日」のようなテーブルを作成し、日付のデータを登録します

今日までの当月の臨時休業の日数: DCount("*","T_臨時休業日","日付 Between #" & Date()-Day(Date())+1 & "# And #" & Date() &"#")

上記と組み合わせて次の計算式で営業日数が求められます

Day(Date())-DateDiff("ww",Date()-Day(Date()),Date(),vbMonday)-DCount("*","T_臨時休業日","日付 Between #" & Date()-Day(Date())+1 & "# And #" & Date() &"#")

※どうせ休日を登録するテーブルが必要ならば、単に「T_休業日」として月曜日(定休日)の日付もすべて登録するという方法も考えられます


「営業日数(非連結)」に表示するには、そのまま非連結であってほしい(手入力が可能な状態にしたい)のであれば、VBAを使って適宜上記計算式を呼びだします
たとえば、フォームを読み込んだ時であれば、フォームの読み込み時イベントに[イベント プロシージャ]を設定し当該フォームのモジュールに以下のように記述します

Private Sub Form_Load()
    Me!営業日数 = 営業日数取得
End Sub

Function 営業日数取得()
    営業日数取得 = Day(Date) - DateDiff("ww", Date - Day(Date), Date, vbMonday) - DCount("*", "T_臨時休業日", "日付 Between #" & Date - Day(Date) + 1 & "# And #" & Date & "#")
End Function

特に営業日数を変更するようなことがないのであれば「営業日数」のコントロールソースに上記計算式をそのまま記述してもよいでしょう。ただし、vbMondayのようなVBA内でのみ使えるような定数は書き換える必要があります

=Day(Date())-DateDiff("ww",Date()-Day(Date()),Date(),2)-DCount("*","T_臨時休業日","日付 Between #" & Date()-Day(Date())+1 & "# And #" & Date() &"#")
通報 ...