- ベストアンサー
テーブルタブの日付範囲の表示
- アクセス2007を使ってテーブルA(tblA)には異なるレコードID、カスタマーID、日付、データ(M, N, O)が入っています。
- クエリA(qryA)を使用して、指定された日付の範囲のデータを抽出するために、日付のフィールドにBetween [Enter first date:] And [Enter last date:]という抽出条件を追加しました。
- しかし、このクエリAで抽出したデータを要約しようとテーブルタブを使用したところ、エラーメッセージが表示されました。どのように日付範囲のテーブルタブを作成すれば良いか分からないので、お助けいただきたいです。
- みんなの回答 (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)
その他の回答 (2)
- 30246kiku
- ベストアンサー率73% (370/504)
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を書き換えたら再クエリするとか。 そもそも最初の方法でエラーにならないものがあるのかも。 失礼しました。
補足
VBAを使う前までは、楽勝です。 VBAは使ったことがないのでちょっと理解するのに時間が必要です。InputBoxを使えば、出来そうですね。今の私では出来ませんけど(^^; 糸口が見えたようなので、勉強してきますが、デッドラインが近づいていますので、Inputboxの使い方もふくめてVBAをサラサラと教えてくだされば感謝感激です。
- 30246kiku
- ベストアンサー率73% (370/504)
今回のは理解できていないので、前回のデータを使って書いてみます。 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 になります。
補足
すいません。説明が分かりづらかったですね。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:]))を入れるとやはりエラーメッセージが出ます。何か他の方法を考えないといけないんですかね?
お礼
出来ました!おまけに、ボタンを押すと出てくるようにしました。何とか間に合いそうです。30246kikuさんのおかげです。感謝。