• 締切済み

ACCESSには NETWORKDAYS関数はない??

MS ACCESS には Datediff関数はありますが、エクセルのNETWORKDAYS関数またはそれに代わる方法はないでしょうか。 ある依頼の受付から回答するまでの日をもとめたいのですが、単純な引き算ではなく、土日や祝祭日を除いた日数(営業日)が必要です。 エクセルでは、受付日と回答日をNETWORKDAYS関数で処理すると何営業日かを知ることができます。 残念ながらACCESSでこれを実現するすべをしりません。 どなたかご存知の方がいらっしゃいましたら、どうか助けてください。

みんなの回答

  • yomo3
  • ベストアンサー率32% (88/269)
回答No.4

No.1です。 「できるはずです」と先ほど書いたのは、自動カレンダーを作成したことがあるからです。 ここにスクリプト全部を書くのも面倒なので、要点のみですが、休業日をテーブルに登録する手順を書きます。 1)土日が必ず休業ならば、土日をリテラルでテーブルに登録する。 2)規則的な休日を別のテーブルに保存する。 これは2通りのパターンがあります。 a)毎年同じ日 b)成人の日のように第○月曜日 それぞれ登録の仕方を工夫してみてください。 3)それ以外の社休日を別のテーブルに登録する。 4)2)と3)のテーブルから1)のテーブルにリテラルで登録する。ここのポイントは振替休日です。まあ全体の中から考えると大した手間ではありません。 上記1)4)は要求された期間についてテーブルを作成するように組むと便利です。 与えられた期間の休業日を得るにはクエリーを使います。もちろんクエリーも要求された期間に応じて自動的に作成されるようにします。すでにできている期間は作成しないようにするのは当然です。 1)のテーブルにインデックスやキーを設定するとレスポンスが悪くなるので設定しない方がいいでしょう。 この方法のメリットは、一度組んでしまえば3)のメンテナンスを気にするだけでほとんど半永久的に使えます。休日が変更になったら2)をいじればOK。変更前に過去の休業日を全部登録してしまえば、2)の変更が過去に影響することもありません。 デメリットは、最初がえらく大変だということです。どの程度使うのかによって考えればいいと思います。

access_man
質問者

お礼

どうもありがとうございました。 結局、一行一行取り出して、EXCELの関数をオートメーションで呼び出し、一行一行書き込むということしかないのかなぁと思っています。 でもそのコードは書けない... いづれにしてもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(1)開始日を決める。それ以前の日付けを始点にしないルールにする。 (2)日付けシリアル値で扱う。 (3)土日はWeekDay関数を使って日数から除く (4)祝祭日は、テーブルをもって(#2003/7/21#のような)、それに該当する日を日数から省く。 (5)祝日の日が浮動するのでテーブルしかない。    ロジックで組みこむと相当ややこしい。 (6)シコシコとロジックを考えプログラムを組む。 (7)(5)から、定期的にテーブルをメンテすると言う 最も面倒なことになりますが、覚悟せざるを得ないでしょう。メンテの必要なことを利用者に知らせる仕掛けを作っておく。例)祝日最終更新日XXXXと利用の都度メッセージをだすとか。普通は会社のシステム部やオペセンターの仕事が、パソコンでは、誰かに回ってくるわけです。

noname#4564
noname#4564
回答No.2

ありません。 要件に合うロジックを自前で作り込むしかありません。 土日はともかく、祝祭日は国によって違いますし、法改正による変更もありますので、汎用関数としてパッケージに組み込むのは困難だと思います。 (Microsoftの肩を持つ訳ではありませんが)

  • yomo3
  • ベストアンサー率32% (88/269)
回答No.1

日常的に使っているアクセスが97なので、間違っているかもしれませんが、営業日を返す関数はないはずです。 少々面倒なことになってしまいますが、営業日若しくは休業日のデータベースをつくって、クエリーでカウントするというのはいかがでしょう。日付に対する曜日は、Weekday関数でわかるので、その他の休業日を登録するプログラムを組めば、自動的にテーブルを作成できるはずです。

関連するQ&A

  • エクセルの関数について教えてください。

    Excel2003で質問です。 以前、NETWORKDAYSという関数で、稼動日の計算をしていました。 そのファイルを今日久々にみたところ、数値がエラー(#NAME)になっていたのですが・・何故でしょう。 ちなみに計算式は =NETWORKDAYS(開始日,終了日,祝祭日のリスト) です。 修正しようと、関数を全て表示にしたところ「NETWORKDAYS」の関数が見当たらないのですが・・仕事で使っているので困っています。 わかるかた教えてください。

  • Access2000で時間差を求める関数を教えてください

    日数の差を求める関数を知人に  =DATEDIFF() と教わりました。 日数ではなく、経過時間として表示させるにはどのようにしたらいいでしょうか? フォーム上に経過時間が出ればいいと思っておりますが、 加えて、テーブルにデータとして残るようになればなおいいなと考えています。 当方ACCESS2000を使用しており、全くの初心者です。 内容が込み入ってしまう場合、参考できるWEB・書籍のご紹介でも大変助かります。 何卒よろしくお願い致します。

  • 基準日が休日などの場合の翌営業日を求める方法!

    ある日から14日間後を基準日として、その基準日が土、日、祝祭日の場合は、15日目が土、日、祝日分の日数をプラスした営業日まで延長される計算式を教えてください。営業日は、土、日、祝祭日以外です。 (例えばある日が1月28日の場合は、14日目が2月11日にあたるので、翌営業日が2月13日になるという感じです。)毎年、祝祭日が変わるし複雑でわかりません。 何かいい関数などがあれば教えてください。

  • Accessテーブルのデータ型を変更したい

    Access95 Version7を使っています。 DateDiff関数を使って日数を出したいのですが、 テーブルにあるデータは”テキスト型”になっています。 これを”日付/時刻型”に変換するには、どうすれば良いのでしょうか? データ例:20010520 というように、8桁で入っています。 宜しくお願いします・・・。

  • Excel2010 平日を取得する関数について

    カテゴリーを知らなくてWindows7に質問したので変更しました。 平日の日数を取得する関数は、NETWORKDAYSで取得できますが、開始日と終了日を入力しなければならず、月毎に変わる日数の開始日と終了日を関数式に入力できないので、年月を表示しているのでそれを利用してできる方法はないでしょうか。 また、土日祝日の日数を取得する関数があれば教えてください。

  • ACCESSで、EXCELのような、sumif関数のような関数ってありますか?

    ACCESSで、EXCELのような、sumif関数のような関数っ てあるのでしょうか? 現在サブフォームの中で、メインフォームで抽出した ものを表示させているのですが、 サブフォームの[土日]フィールドに[●]印のつけられ た部分の[売上]フィールドの売上合計を出したいと思うのです。 dsum関数を使うと、メインフォームで抽出されていな いすべでのデータを足しているようなので、なにか方 法があれば教えていただきたく思います。 どうぞよろしくお願いいたします。

  • エクセル2000 の関数について

    お世話になります。 NETWORKDAYS関数を使って、土日・祝日を除く日数をカウントするのは、過去の質問から分かったのですが、 その他の条件として、土曜出勤の日が含まれている場合には、 プラスして計算したい場合は、どうすればよろしいでしょうか? エクセル2000のバージョンを使っています。 A列に開始日  B列に終了日  C列に日数 ※E列の日付が含まれていたら除く ※F列の日付が含まれていたら1日プラスする。  A列      B列      C列     E列      F列 1 開始日    終了日    日数    祝日      土曜出勤日 2 2006/08/01  2006/08/11  **     2006/07/17   2006/07/22 3 2006/08/11  2006/08/18  **     2006/08/14   2006/08/19 4 2006/08/14  2006/08/25  **     2006/08/15 5 2006/08/17  2006/08/25  **     2006/09/18 よろしくお願いします。

  • ACCESSとEXLの算出で差分が出る

    こちらのクエリーを活用して経過日数を算出しているのですが、 http://okwave.jp/qa/q8769213.html (SQL構文) SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数 FROM テーブル GROUP BY テーブル.ID; パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。 エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。 例 クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137 例 エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136 No.1 回答者:bin-chan回答日時:2014/09/26 22:11 > エクセルの方が1多いのですが、エクセルが誤りでしょうか。 いいえ。「関数の仕様が異なる」です。fの数も違うし。 参考URL:http://www.office-kitami.com/lesson/afunction/da … ↑↑↑↑↑ 原因はわかったのですが、xls.と同じ定義にはできないのでしょうか。 他の方は、このような場合、どのように対処されているのでしょうか。。。 現在のSQL構文に、参考URLにある、 IIf(Format(Date(),"mmdd")<Format([経過日数],"mmdd"),DateDiff("yyyy",[経過日数],Date())-1,DateDiff("yyyy",[経過日数],Date())) の要素を組み込むことはできないのでしょうか。それとも新たに別列で組み込まなければならないでしょうか。

  • エクセル関数 networkdays

    稼働日・リードタイムの計算で、エクセル関数のnetworkdaysを使用したが計算結果にバラツキが出て困ってます。休日に関係なく、例えば昨日と今日の関係が「1」になったり「2」になったりします。

  • Accessで経過日数を求める関数を教えていただけないでしょうか。

    アクセスで経過日数を求めたいのですが、次のような場合はどのような式を組めばよいのでしょうか? フィールド: 請求日 支払日 支払確認日 新たに設ける関数式フィールド:経過日数 請求日から20日過ぎて、なおかつ支払確定日が空白のレコードを「経過日数」フィールドに経過日数の数値で返したい。 どなたかおわかりになる方がいらっしゃいましたら、教えていただけないでしょうか。 よろしくお願いいたします。

専門家に質問してみよう