• ベストアンサー

アクセス:既定値に土日含まず3日後を指定したい

エクセルの場合ですとworkday関数を使用すればいいのですが、 アクセスの場合はどのようにしたらよいのでしょうか? いろいろネットで調べてみたのですが、workday関数はアクセスでは無いように思うのですが・・・。 また、もし簡単に出来るのであれば、祝日も除きたいのですが、 これは本当に難しいらしくあきらめています。本当に初心者レベルで申し訳ないのですが、教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.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関数と同じような使い方です。 違いは、休日のデータを、テーブルに用意しておく点です。

ayaya11
質問者

お礼

venzouさん、本当にありがとうございました!! モジュールなんて全くわかっていない自分でも、venzouの書いてある通りにやったら上手く出来ました。これも、すべてvenzouさんのおかげです。 いろいろネットで調べたのですが、教え方が高度で全くわからず、あきらめていました。venzouさんが助けてくれなければあきらめていたでしょう。 本当にありがとうございました。

その他の回答 (1)

  • Bronco7
  • ベストアンサー率29% (150/511)
回答No.1

どういう処理で3日後を得たいのかよく分かりませんが 簡単な方法としてはカレンダーテーブルを用意するか 独自の関数を作成するのが良いかと思います。 土日はともかくとしても祝祭日は毎年変動しますから 祝日テーブルなりは必要だと思いますよ。 例えばですが: 何か日付を入力したら その日付+3日の日付をカレンダーテーブルに参照する 参照した日が土日や祝日扱いなら その翌日の平日日付を返すようにすればよいかと

ayaya11
質問者

お礼

回答ありがとうございました。 例えば以降を実際にどうすればよいかわからず、困りました・・・。

関連するQ&A