• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブルタブの日付範囲の表示)

テーブルタブの日付範囲の表示

このQ&Aのポイント
  • アクセス2007を使ってテーブルA(tblA)には異なるレコードID、カスタマーID、日付、データ(M, N, O)が入っています。
  • クエリA(qryA)を使用して、指定された日付の範囲のデータを抽出するために、日付のフィールドにBetween [Enter first date:] And [Enter last date:]という抽出条件を追加しました。
  • しかし、このクエリAで抽出したデータを要約しようとテーブルタブを使用したところ、エラーメッセージが表示されました。どのように日付範囲のテーブルタブを作成すれば良いか分からないので、お助けいただきたいです。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

では、サンプルを。 (クエリ「Q_BASE」から、「Q_1」を作り直す) Private Sub Sample1()   Dim sStart As String   Dim sEnd As String   Dim wdt As Date   sStart = InputBox("抽出開始日を入力してください。")   sEnd = InputBox("抽出終了日を入力してください。") ' 入力されたのが日付として扱えるか確認   On Error GoTo ERR_HAND   wdt = DateValue(sStart)   wdt = DateValue(sEnd)   On Error Resume Next   CurrentDb.QueryDefs.Delete "Q_1"   CurrentDb.CreateQueryDef "Q_1", _     Replace(Replace(CurrentDb.QueryDefs("Q_BASE").SQL, "XXXXXX", sStart), "YYYYYY", sEnd)   Exit Sub ERR_HAND:   MsgBox "年月日の指定エラーです", vbCritical End Sub ※ クエリ「Q_1」が初めから存在するのであれば、以下の方が良いかも   (クエリ「Q_1」のSQL部分を書き換えるだけ)   On Error Resume Next   CurrentDb.QueryDefs.Delete "Q_1"   CurrentDb.CreateQueryDef "Q_1", _     Replace(Replace(CurrentDb.QueryDefs("Q_BASE").SQL, "XXXXXX", sStart), "YYYYYY", sEnd)   ↓   CurrentDb.QueryDefs("Q_1").SQL = _     Replace(Replace(CurrentDb.QueryDefs("Q_BASE").SQL, "XXXXXX", sStart), "YYYYYY", sEnd)

Kase1
質問者

お礼

出来ました!おまけに、ボタンを押すと出てくるようにしました。何とか間に合いそうです。30246kikuさんのおかげです。感謝。

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

TRANSFORM Count(*) AS 式1 SELECT テーブル名.名前 FROM テーブル名 WHERE (((テーブル名.日付) Between #2009/2/1# And #2009/2/28#)) GROUP BY テーブル名.名前 PIVOT テーブル名.タスク; を TRANSFORM Count(*) AS 式1 SELECT テーブル名.名前 FROM テーブル名 WHERE (((テーブル名.日付) Between [開始日] And [終了日])) GROUP BY テーブル名.名前 PIVOT テーブル名.タスク; とすると、エラーになりますね。 ちょっと私で考えれる別法(実現方法) ここで、必要となるクエリ名を「Q_1」と仮定します。 クエリの初期パターンとして、クエリ「Q_BASE」を以下の内容で作っておきます。 TRANSFORM Count(*) AS 式1 SELECT テーブル名.名前 FROM テーブル名 WHERE (((テーブル名.日付) Between #XXXXXX# And #YYYYYY#)) GROUP BY テーブル名.名前 PIVOT テーブル名.タスク; クエリ「Q_1」を使いたくなった場合、以下の処理をVBAで行います。 On Error Resume Next CurrentDb.QueryDefs.Delete "Q_1" CurrentDb.CreateQueryDef "Q_1", _   Replace(Replace(CurrentDb.QueryDefs("Q_BASE").SQL, "XXXXXX", "2009/2/1"), "YYYYYY", "2009/2/28") クエリ「Q_1」を削除し、クエリ「Q_BASE」のXXXXXX/YYYYYYを書き換えた新しいクエリ「Q_1」を作成します。 入力させるのであれば、InputBox等を使用し、上記書き換え部分に用いればよいのでは。 フォーム等で、Q_1を書き換えたら再クエリするとか。 そもそも最初の方法でエラーにならないものがあるのかも。 失礼しました。

Kase1
質問者

補足

VBAを使う前までは、楽勝です。 VBAは使ったことがないのでちょっと理解するのに時間が必要です。InputBoxを使えば、出来そうですね。今の私では出来ませんけど(^^; 糸口が見えたようなので、勉強してきますが、デッドラインが近づいていますので、Inputboxの使い方もふくめてVBAをサラサラと教えてくだされば感謝感激です。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

今回のは理解できていないので、前回のデータを使って書いてみます。 http://oshiete1.goo.ne.jp/qa4756150.html 以下のようなテーブルになったとします。 名前, 日付,  タスク A,  2009/2/10, M A,  2009/2/11, N B,  2009/2/12, M C,  2009/2/13, O A,  2009/3/1,  M TRANSFORM Count(*) AS 式1 SELECT テーブル名.名前 FROM テーブル名 GROUP BY テーブル名.名前 PIVOT テーブル名.タスク; であると、 名前  M   N   O A   2   1  B   1  C          1 の表示になります(前回のもの)が、 TRANSFORM Count(*) AS 式1 SELECT テーブル名.名前 FROM テーブル名 WHERE (((テーブル名.日付) Between #2009/2/1# And #2009/2/28#)) GROUP BY テーブル名.名前 PIVOT テーブル名.タスク; とすると、 名前  M   N   O A   1   1  B   1  C          1 になります。

Kase1
質問者

補足

すいません。説明が分かりづらかったですね。m(_ _)m 前回のアドバイスからQSLを見て勉強しています。で、WHERE文だと思ったんです。アドバイス通りWHERE (((tblA.日付) Between #2009/2/1# And #2009/2/28#))をいれて見たところ動きました。しかし、このデータベースへの入力、日常の管理を他の者がやっている関係上、その人にQSL文を見せたり、デザインビューを見せたりしたくないので、そのつど日付を聞いてくるような形をとりたいんです。しかし、WHERE (((tblA.日付) Between #2009/2/1# And #2009/2/28#))の代わりにWHERE (((tblA.日付) Between [Enter first date:] And [Enter last date:]))を入れるとやはりエラーメッセージが出ます。何か他の方法を考えないといけないんですかね?

関連するQ&A