• 締切済み

Access VBA内でのクエリの紐付け

お世話になります。 Accessにて、ローカルに12個(月毎)にクエリを作成し、そのらのクエリを紐付けてテーブルを作成しようとしています。 しかし、できればローカルにクエリを作成したくないので、VBA内で仮想?にクエリを作成し、それらを紐付けて最終的にテーブルを作成したいと考えています。 VBAのイメージ的には以下のような感じです。  フォーム上のボタンがクリックされた際に、    MySQL1 = 1月分の選択クエリ    MySQL2 = 2月分の選択クエリ    MySQL3 = 3月分の選択クエリ            ・            ・    MySQL11 = 11月分の選択クエリ    MySQL12 = 12月分の選択クエリ    MySQL13 = 上記12個の選択クエリを紐つけたテーブル作成クエリ(tempを作成)    DoCmd.RunSQL MySQL13    'tempが作成されたら、そのテーブルをソースとしたレポートをOpen          DoCmd.OpenReport "年間実績"    以上です。 それぞれの選択クエリを、 Set RS0 = DB.OpenRecordset(MySQL0) Set RS1 = DB.OpenRecordset(MySQL1) のようにして、MySQL13のテーブル作成クエリで、RS0、RS1を使用すればよいかと思ったのですが、『入力テーブルまたはクエリ”RS0”が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。』と表示され、うまくいきません。 そもそも、上記のように仮想でクエリを作成し、それを紐付けてテーブルを作成することは可能なのでしょうか。よい方法がございましたらご教授願います。 以上、宜しくお願い致します。  

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

12個のクエリを作らずともクロス集計クエリで出来そうです。 下記の場合の、日付を製品コードに、担当者を年月日に置き換えて考えてみてください。 http://hamachan4.exblog.jp/4110849/ 具体的なテーブルのデザインや具体例が分かりませんので 的を射た回答はしづらいです。

naoto0216
質問者

お礼

ご回答ありがとうございます。 質問としましては、mdbのローカルにクエリを作成しないで抽出したいということです。 色々試してみて1つのクエリ(集計クエリも含め)で抽出できない為、個々にクエリを仮想で作成し、それらを紐付けて抽出出来たらと考えた次第です。 例では簡単に記載しましたが、実際には個々のクエリはもっと複雑なことをやって抽出してます。 見栄えは悪いですが、とりあえずローカルに12個のクエリを作れば、望みの抽出結果は得られるので、それでやろうと思います。 ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

レポートあるいはフォームのレコードセットは テーブルやクエリ以外にSQLを直接記述する ことが可能です。以下は例です。 MySQL1の内容 SELECT * FROM data WHERE tsuki=1 MySQL2の内容 SELECT * FROM data WHERE tsuki=2 レポートのレコードセット SELECT * FROM data ORDER BY tsuki あるいはレポートのOpenイベントで自身の レコードソースを動的に書き換えても実現 できます。 具体的なSQLの記載がないので、これ以上 サンプルを示せませんが、一時テーブルを 作る方法はあまり感心できません。 経験から、Openイベントでレコードソースを 動的に変更する方法が最も柔軟に対応 できますが、技術的には難しい部類に属し ます。

naoto0216
質問者

お礼

ご回答ありがとうございます。 SQLを直接記述可能なことは理解しているのですが、 一つのクエリ(SQL)で結果を抽出できない状況です。 No.1さんに返信したように、12個のクエリを紐付けして 抽出する必要があります(ユニオンクエリとは異なります)。 具体的には、年間の受注実績のテーブルがあり、そこには 受注日、製品コード、受注数量があります。 今回、抽出したいのは年間で月別の受注実績です。 以下のような感じです。 製品コード 2012年3月  2012年2月 2012年1月・・・ AAA       10       0       5 BBB        3       8       8  ・  ・ 12個のクエリというのは、上記の年月毎のクエリです。 3月分クエリの抽出結果は、 製品コード  2012年3月 AAA        10 BBB         3  ・  ・ のように抽出されています。 これらを製品リストと紐つけて、年間の受注実績を 抽出したいと考えている次第です。 説明不足ですみません。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

ユニオンクエリのSQL文をレポートのレコードソースにすれば良いのでは? http://makoto-watanabe.main.jp/access/acconExamplesUnionQueriesThatSortRenameFieldsReturS.htm union all で繋げてね。

naoto0216
質問者

お礼

ご回答ありがとうございます。 ユニオンクエリだと、 MySQL1の結果    + MySQL2の結果    +    ・    ・ MySQL12の結果 と、なるかと思いますが、やりたいことは MySQL13----MySQL1        |         --MySQL2        |         --MySQL3          ・          ・ で、抽出したいので、ユニオンクエリとはちょっと違います。 説明不足ですみません。

関連するQ&A

  • Access VBAでクエリーのレコード件数を取得したいのですが

    Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

  • ACCESS VBA クエリを開く

    ACCESS初心者です。 VBAはEXCELで独学した程度の知識です。 フォームから受注納期を入力し、クエリを抽出。 クエリでレコード毎に製品票の印刷枚数を計算し レポートで各レコード毎に求められた印刷枚数分を 印刷させたいのですが・・・ クエリを開く段階でつまずいており困っています。 Private Sub コマンド23_Click() Dim db As DAO.database Dim rs As DAO.Recordset Dim qdf As DAO.QueryDef Set db = CurrentDb() Set qdf = db.QueryDefs("受注クエリ") With qdf .Parameters("納期") = Format(Forms![受注データ一覧]![納期], "yyyy/mm/dd") Set rs = .OpenRecordset .Close End With MsgBox rs![注文番号] rs.Close End Sub パラメータクエリの開き方、上記コードで問題ないでしょうか? そしてこのコードを実行した際 実行時エラー3421 データ型の変換エラーが発生しましたと表示されます。 ローカルウィンドウで 変数rs = nothingとなっており クエリのレコードが読み込めていないようです。 (Msgbox rs!注文番号はデータが読み込めたかテストするために コードを書いています。) どうぞ宜しくお願いいたします。

  • VBAをつかってクエリの情報を抽出するには??

    ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。 クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。 クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。 VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか? また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。 以下にどのように記述しているか記します。 ------------ Public Function value() On Error GoTo ERRORRR Set db = CurrentDb Dim rs As Recordset Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset) Debug.Print rs.EOF Do Until rs.EOF Debug.Print rs!ID Debug.Print rs!登録状態 Debug.Print rs!開通年月日 rs.MoveNext Loop rs.Close: Set rs = Nothing db.Close: Set db = Nothing Exit Function ERRORRR: msgbox Err.number & ":" & Err.description End Function -------- 開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。) 使用しているACCESS Ver:ACCESS97

  • アクセスVBAでの別アクセス呼び出しの記述について

    作成したいテーブルが大きすぎて、2Gをあっという間に超えてしまいます。 なので、別のアクセスMDBも併用しつつ処理を実行しようかと思うのですが、 下記のように書いています。すると、まず、一つ目のDB(VBAを書いているほうのDB)でのtestクエリは実施され、TEST1DBが呼び出されるところまではいくのですが、TEST1DBにのっているtest2というクエリはうごきません。 どのように記述すればよいのでしょうか??ど素人でもうしわけありませんが、 どうぞよろしくお願いします。 Option Compare Database Sub test() DoCmd.OpenQuery "test" fl_name = "MSAccess C:\xx\test1.mdb" Call Shell(fl_name, 1) DoCmd.OpenQuery "test2" End Sub また、あわせて質問なのですが、 テーブル作成クエリなので、「テーブルが削除されます」とかがでます。 自動バッチにしたいので、いちいち確認しないでサクサクと次へ進んでほしいのですが 解決策はあるのでしょうか? よろしくお願いします あと、いつも迷うのですが、、アクセスのフォームとかを書くときに使っているVBAは、 カテゴリー選択にないので、、VisualBasicを選んでいいんでしょうか??

  • アクセスVBAでテーブル作成クエリを作れる?

    アクセス97です。 テーブル作成クエリで 他のmdbに テーブルを作成してるのですが 他のmdbのフルパスが固定でなく可変です。 テーブル作成クエリの 他のデータベース名を VBAで変更出来るでしょうか? もしくは VBAでテーブル作成クエリを 作成出来るでしょうか?

  • Accessのパラメータクエリを他のクエリから呼ぶ

    VBAで日付を指定してSelectするクエリなのですが、同じ処理をたくさんつくるのが嫌なので、 パラメータクエリにしたいのですが、、、 例えば、 日別売上クエリ: Parameters pDate datetime; を持つ        (VBAから直接呼ぶのはこれだけ) このクエリは、以下の2つのJoinからなる  日別レジ別売上クエリ: 下位クエリで、Parameters pDate datetime; を持つ (客数を得るクエリ) 日別部門別売上クエリ: 下位クエリで、Parameters pDate datetime; を持つ (金額を得るクエリ) 共に、Where を日付=pDateとしてます。 そうしておいて、VBAから set rs1=DB1.Openrecordset(”Select  、、、、From  日別売上クエリ(#” & strDate  & ”#) ”) とやったのですが、ダメでした。 パラメータクエリを他のクエリから呼ぶ構文をお教え下さい。 尚、「パラメータクエリをクエリから呼」や「パラメータクエリをSQLから呼」でGoogleったのですが、 見つかりませんでした。

  • EXCEL vbaからACCESSのクエリを開く

    EXCEL2010 WEBを参照してEXCEL VBAでACCESSのクエリを開くマクロを流用しました。 下記がマクロの内容です。 Private Sub Import() Dim db As ADODB.Connection Dim rs As ADODB.Recordset 'ACCDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Ace.OLEDB.12.0" db.Open "C:\work\TEHAI.accdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'Accessのクエリを開く rs.Open Source:="TEHAI", ActiveConnection:=db If rs.EOF Then MsgBox "抽出した結果、レコードが見つかりません。" Else ' レコードをシートへ貼り付ける Range("A1").CopyFromRecordset rs End If rs.Close Set rs = Nothing Set db = Nothing End Sub これを実行すると、 抽出した結果、レコードが見つかりません。 が表示されます。 ACCESS単体でTEHAIクエリを実行したら、約3万件くらいヒットします。 EXCELマクロから実行したらACCESSからデータをもってこられません。 なぜレコードが見つかりません、 となるのでしょうか? マクロのどこがおかしいのか、教えていただきたく。 ちなみに、もともとの内容から変更したのは db.Open "C:\work\TEHAI.accdb" rs.Open Source:="TEHAI", の2ヶ所だけです。

  • Access2010「クエリが複雑すぎます」

    お世話になります。 ユニオンクエリAがあり、そのクエリを使用してクエリB(テーブルや別のクエリとも紐付け)を作成しました。問題なく抽出できます。  <クエリB>  ユニオンクエリA ----→ クエリX              |               ---→ テーブル1              |               ---→ テーブル2              |               ---→ テーブル3 新たにユニオンクエリAを使って、クエリCを作成したところ「クエリが複雑すぎます」と表示されてしまいます。いくつかのテーブル/クエリと紐付けていたので、一つずつ取っていったところ、最終的にはユニオンクエリA一つでもエラーが出てしまいます。単純な選択クエリです。 クエリBは同じユニオンクエリAを使い、複数のクエリとテーブルとを紐付けているのにも関わらずエラーとなりません。。 どのようなことが考えられますでしょうか。 Accessを起動し直したり、端末自体も再起動しましたが状況変わらずでした。 また、ユニオンクエリA単体を開いても問題無く抽出されます。 ご教授の程、宜しくお願い致します。

  • Access VBA 削除

    またお世話になります。 Access2003を使用しています。 不要になったアカウントを削除できるようなものを作成したいのですがうまくいきません。 リストボックスに表示されたアカウントを選択し、 ボタンを押すとテーブルから削除できるというものを考えています。 テーブル名: tbl_ユーザー フィールド名: ユーザー名 パスワード アカウント フォーム名: frm_Account_Delete  リストボックス: UserList  コマンドボタン: Del いろいろ調べて自分なりに作ってみたのですがエラーが出てしまいました。 ―――以下VBAコード――― Dim db As Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("tbl_ユーザー") If IsNull(UserList) Then MsgBox "削除するアカウントを選択してください" Else If MsgBox(UserList & "を削除しますか?", vbYesNo) = vbYes Then db.TableDefs.delete UserList     MsgBox "UserListを削除しました。" End If End If rs.Close db.Close Set db = Nothing ―――以上――― これだと”このコレクションには項目がありません”というエラーが出ます。 アドバイスをよろしくお願いします。

  • アクセスVBA 追加クエリ

    下記クエリが一つあります。 [Q_商品] ID 商品名 価格 色 サイズ 重さ 送料 備考 [Q_商品]から、[T_テスト]をテーブルの作成から作りました。 [T_テスト]は、毎回利用する時に、すべてデリートして、[Q_商品]のデータを追加したいです。 [T_テスト]のデータの、すべてデリートは下記VBAでできました。 Private Sub コマンド40_Click() 'システムメッセージの非表示 DoCmd.SetWarnings False DoCmd.RunSQL "DELETE FROM T_テスト" 'システムメッセージの表示 DoCmd.SetWarnings True End Sub [Q_商品]のデータを追加するVBAを教えて下さい。 よろしくお願い致します。