- 締切済み
ACCESSには NETWORKDAYS関数はない??
MS ACCESS には Datediff関数はありますが、エクセルのNETWORKDAYS関数またはそれに代わる方法はないでしょうか。 ある依頼の受付から回答するまでの日をもとめたいのですが、単純な引き算ではなく、土日や祝祭日を除いた日数(営業日)が必要です。 エクセルでは、受付日と回答日をNETWORKDAYS関数で処理すると何営業日かを知ることができます。 残念ながらACCESSでこれを実現するすべをしりません。 どなたかご存知の方がいらっしゃいましたら、どうか助けてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yomo3
- ベストアンサー率32% (88/269)
No.1です。 「できるはずです」と先ほど書いたのは、自動カレンダーを作成したことがあるからです。 ここにスクリプト全部を書くのも面倒なので、要点のみですが、休業日をテーブルに登録する手順を書きます。 1)土日が必ず休業ならば、土日をリテラルでテーブルに登録する。 2)規則的な休日を別のテーブルに保存する。 これは2通りのパターンがあります。 a)毎年同じ日 b)成人の日のように第○月曜日 それぞれ登録の仕方を工夫してみてください。 3)それ以外の社休日を別のテーブルに登録する。 4)2)と3)のテーブルから1)のテーブルにリテラルで登録する。ここのポイントは振替休日です。まあ全体の中から考えると大した手間ではありません。 上記1)4)は要求された期間についてテーブルを作成するように組むと便利です。 与えられた期間の休業日を得るにはクエリーを使います。もちろんクエリーも要求された期間に応じて自動的に作成されるようにします。すでにできている期間は作成しないようにするのは当然です。 1)のテーブルにインデックスやキーを設定するとレスポンスが悪くなるので設定しない方がいいでしょう。 この方法のメリットは、一度組んでしまえば3)のメンテナンスを気にするだけでほとんど半永久的に使えます。休日が変更になったら2)をいじればOK。変更前に過去の休業日を全部登録してしまえば、2)の変更が過去に影響することもありません。 デメリットは、最初がえらく大変だということです。どの程度使うのかによって考えればいいと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
(1)開始日を決める。それ以前の日付けを始点にしないルールにする。 (2)日付けシリアル値で扱う。 (3)土日はWeekDay関数を使って日数から除く (4)祝祭日は、テーブルをもって(#2003/7/21#のような)、それに該当する日を日数から省く。 (5)祝日の日が浮動するのでテーブルしかない。 ロジックで組みこむと相当ややこしい。 (6)シコシコとロジックを考えプログラムを組む。 (7)(5)から、定期的にテーブルをメンテすると言う 最も面倒なことになりますが、覚悟せざるを得ないでしょう。メンテの必要なことを利用者に知らせる仕掛けを作っておく。例)祝日最終更新日XXXXと利用の都度メッセージをだすとか。普通は会社のシステム部やオペセンターの仕事が、パソコンでは、誰かに回ってくるわけです。
ありません。 要件に合うロジックを自前で作り込むしかありません。 土日はともかく、祝祭日は国によって違いますし、法改正による変更もありますので、汎用関数としてパッケージに組み込むのは困難だと思います。 (Microsoftの肩を持つ訳ではありませんが)
- yomo3
- ベストアンサー率32% (88/269)
日常的に使っているアクセスが97なので、間違っているかもしれませんが、営業日を返す関数はないはずです。 少々面倒なことになってしまいますが、営業日若しくは休業日のデータベースをつくって、クエリーでカウントするというのはいかがでしょう。日付に対する曜日は、Weekday関数でわかるので、その他の休業日を登録するプログラムを組めば、自動的にテーブルを作成できるはずです。
お礼
どうもありがとうございました。 結局、一行一行取り出して、EXCELの関数をオートメーションで呼び出し、一行一行書き込むということしかないのかなぁと思っています。 でもそのコードは書けない... いづれにしてもありがとうございました。