- ベストアンサー
アクセス:既定値に土日含まず3日後を指定したい
エクセルの場合ですとworkday関数を使用すればいいのですが、 アクセスの場合はどのようにしたらよいのでしょうか? いろいろネットで調べてみたのですが、workday関数はアクセスでは無いように思うのですが・・・。 また、もし簡単に出来るのであれば、祝日も除きたいのですが、 これは本当に難しいらしくあきらめています。本当に初心者レベルで申し訳ないのですが、教えていただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
workday関数ですが、Accessにはないので、 モジュールで自作する必要があります。 まず、祝日や、盆休みなどの休日のデータを用意します。 Accessの場合、テーブルとして作った方が良いでしょう。 テーブル名 :holiday フィールド名:data (日付型) 主キー 土日は計算できるので、土日以外の、祝日や、 振り替え休日、会社独自の休日などを登録しておきます。 次に、新規のモジュールを追加し、下記のようなソースを記述。 適当な名前で保存して下さい。 ----------------------------------------------------------- Option Compare Database Option Explicit 'd(日付)から、c(日数)営業日後の日付を返す Public Function WorkDay(d As Date, c As Integer) Dim count As Integer '初期化 WorkDay = NextWorkDay(d) count = 0 Do While count < c '営業日をカウントしながら進める WorkDay = NextWorkDay(DateAdd("d", WorkDay, 1)) count = count + 1 Loop End Function 'd(日付)以降の営業日を返す Private Function NextWorkDay(d As Date) As Date NextWorkDay = d Do While IsHoliday(NextWorkDay) NextWorkDay = DateAdd("d", NextWorkDay, 1) Loop End Function 'd(日付)が、土日・休日かチェック Private Function IsHoliday(d As Date) As Boolean If Weekday(d) = vbSunday Or Weekday(d) = vbSaturday Then '土日ならTrue IsHoliday = True ElseIf IsNull(DLookup("data", "holiday", "data = #" & d & "#")) Then '平日で、休日でなければFalse IsHoliday = False Else '休日ならTrue IsHoliday = True End If End Function ----------------------------------------------------------- フォームの既定値のプロパティでは下記の様に使います。 今日から3営業日後の日付を規定値にする場合、 WorkDay(Date(),3) Excelのworkday関数と同じような使い方です。 違いは、休日のデータを、テーブルに用意しておく点です。
その他の回答 (1)
- Bronco7
- ベストアンサー率29% (150/511)
どういう処理で3日後を得たいのかよく分かりませんが 簡単な方法としてはカレンダーテーブルを用意するか 独自の関数を作成するのが良いかと思います。 土日はともかくとしても祝祭日は毎年変動しますから 祝日テーブルなりは必要だと思いますよ。 例えばですが: 何か日付を入力したら その日付+3日の日付をカレンダーテーブルに参照する 参照した日が土日や祝日扱いなら その翌日の平日日付を返すようにすればよいかと
お礼
回答ありがとうございました。 例えば以降を実際にどうすればよいかわからず、困りました・・・。
お礼
venzouさん、本当にありがとうございました!! モジュールなんて全くわかっていない自分でも、venzouの書いてある通りにやったら上手く出来ました。これも、すべてvenzouさんのおかげです。 いろいろネットで調べたのですが、教え方が高度で全くわからず、あきらめていました。venzouさんが助けてくれなければあきらめていたでしょう。 本当にありがとうございました。