• ベストアンサー

複数クエリのデータをまとめるには?

複数クエリのデータをまとめるには? Accessで以下のようなクエリが複数あります。 クエリ:○×町  name ○×町面積  ○×町 123 クエリ△△町  name △△町面積  △△町 567 これを以下のようにまとめる方法があるでしょうか?  name 町面積  ○×町 123  △△町 567 Access初心者です。 どのような機能があるのかまだよく分かっていませんのでよろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

クエリでは実現できないデータのまとめかた なので、以下のようにプログラムを組む 必要があります。 各クエリがたとえば、 クエリ:○×町-A  name ○×町面積  ○×町 123 が、 クエリ:○×町-A  name ○×町面積  ○×町 123  ○×町 259  ○×町 393 のようにまだデータを取る場合は また、違う方法をとらなければなりませんが、 各クエリが提示されたようにレコードが一つ ならば、以下のようになります。 ただし、フィールドの並びが、  name ○×町面積 のようになっていることが条件です。 (1) データを収めるテーブルを一つ用意します。 テーブルの名前を、T面積 フィールドの名前を、名称、町面積A、町面積B とします。尚、nameという名称はコードの中では いろいろと面倒なことが起きる名称なので、 クエリのnameという名前は名称とします。 したがって、各クエリのnameのところを、デザインビューで、 名称:name としてください。 なお、T面積の各フィールドの型のテキスト型、数値型 などは、そちらのデータにあわせてください。 (2) 新規のフォームにボタンを作り、以下のコードを フォームのコード表に張り付けて保存してください。 Private Sub コマンド0_Click() Dim db As Database Dim qdf As QueryDef Dim rs As Recordset Dim rsqA As Recordset Dim rsqB As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T面積", dbOpenDynaset) '登録されているクエリを検索 For Each qdf In db.QueryDefs '先にクエリの名前の末尾2字が-Aとなっているクエリを検索 If Right(qdf.Name, 2) = "-A" Then Set rsqA = db.OpenRecordset(qdf.Name, dbOpenDynaset) If rsqA.RecordCount > 0 Then rsqA.MoveFirst 'クエリのデータをテーブルに格納 Do Until rsqA.EOF rs.AddNew rs!名称 = rsqA!名称 rs!町面積A = rsqA.Fields(1) rs.Update rsqA.MoveNext Loop End If rsqA.Close: Set rsqA = Nothing End If 'クエリの名前の末尾2字が-Bとなっているクエリを検索 If Right(qdf.Name, 2) = "-B" Then Set rsqB = db.OpenRecordset(qdf.Name, dbOpenSnapshot) If rsqB.RecordCount > 0 Then rsqB.MoveFirst Do Until rsqB.EOF '格納先のテーブルを検索 rs.MoveFirst Do Until rs.EOF '格納先の名称と同じものがクエリに存在するか検索 If rs!名称 = rsqB!名称 Then 'クエリのデータをテーブルに格納 rs.Edit rs!名称 = rsqB!名称 rs!町面積B = rsqB.Fields(1) rs.Update rsqB.MoveNext End If rs.MoveNext Loop Loop End If rsqB.Close: Set rsqB = Nothing End If '検索のため次のクエリに移動 Next qdf rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub 各クエリのデータが一件づつというのは、 余りにも非効率な気がします。、 このようなデータの取り方をしなければ ならない事情があるならば別ですが、 もしデータが大量にあってこのような クエリを大量につくらなけらばならないのならば 何をどのようにしたい、ということがわかれば プログラムだけ、あるいは少しのクエリと プログラムの組み合わせで十分対応できるのでは と思います。 なお、提示したプログラムはあくまでも各クエリが データを一件づつしかもたない場合に限定されます。 一件ではない場合は、クエリの作り方とコードを 変更する必要があります。そのあたりは、いかがですか。

henohenomohe_ji
質問者

お礼

お礼が遅くなって申し訳ありません。 教えていただいたこと実現できました、ありがとうございます。 やりたいことが少し複雑になるだけで、こんなにいろいろと 手数が必要になるのですね。 初心者の私には、教えていただいたことを実現するのが精一杯 で、とても自力でできるほど理解できていません。^^; 教えていただいたおかげで、Accessの理解が少し深まりました。 何度も回答いただきまして、本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.8

#7です。 コードをフォームのコード表に貼り付け保存した後、 コード表のツール→参照設定から、 Microsoft DAO xx Object Libraryにチェックを入れて ください。xxは3.6のような数字です。xxは一番数値が 高いものを選択してください。なお、 Microsoft ActiveX Data Objects xx Libraryにチェックが 入っていたらはずしてください。

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

#5です。あるいは、 クエリ:○×町-A  name ○×町面積  ○×町 123 クエリ:○×町-B  name ○×町面積  ○×町 345 クエリ:△△町-A  name △△町面積  △△町 567 クエリ:△△町-B  name △△町面積  △△町 789 ということでしょうか。 それから、補足のまとめは、  name 町面積A 町面積B 町面積C 町面積D  ○×町  123  345 365 698  △△町  567  789  244 983 のような事にもなるのでしょうか。あるいは、  name 町面積A 町面積B  ○×町  123  345  △△町  567  789  ○△町  698  423   ・   ・ のようになるのでしょうか。

henohenomohe_ji
質問者

補足

クエリ:○×町-A  name ○×町面積  ○×町 123 クエリ:○×町-B  name ○×町面積  ○×町 345 クエリ:△△町-A  name ○×町面積  △△町 567 クエリ:△△町-B  name ○×町面積  △△町 789 が正しいです。スミマセンでした。^^;  name 町面積A 町面積B  ○×町  123  345  △△町  567  789  ○△町  698  423 というようにできれば、と思っています。

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

補足の、 クエリ:○×町-A  name ○×町面積  ○×町 123 クエリ:○×町-B  name ○×町面積  ○×町 345 クエリ:△△町-A  name ○×町面積  ○×町 567 クエリ:△△町-B  name ○×町面積  ○×町 789 は、 クエリ:○×町-A  name ○×町面積  ○×町 123 クエリ:○×町-B  name ○×町面積  ○×町 345 クエリ:△△町-A  name ○×町面積  △△町 567 クエリ:△△町-B  name ○×町面積  △△町 789 ではないのですか? また、補足のデータが少ないので、データが増えたとき  name 町面積A 町面積B  ○×町  123  345  △△町 567  789 がどのように変化するのかわからないので、 補足の各クエリのデータを3つくらい増やして、 まとめたデータがどのようになればいいのか 示してみてください。ある程度データがあれば 出来るか出来ないかがわかります。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

クエリは仕組みであって、結果は具体的に見えているものの、ファイルになっていない。 クエリをテーブル化する操作があるので一旦ファイルにして統合する方法もある。 またファイル・テーブルをVBAなどで統合するなら出来る。 ーー (1)少ない(20-30までか)町村数なら、SQLビューのSQL文の中に条件で IN (・・・) に羅列する。SQL分の書き換えになります。 (2)SQL文の条件をORで書き連ねて結ぶ。 またはデザイングリッドで条件にOrで超尊町村数だけ書き連ねる (3)同じようなことでUNION句を使いSQL文を書き連ねる SQL UNIONで照会 http://sql.1keydata.com/jp/sql-union.php SQL INで照会 http://sql.1keydata.com/jp/sql-in.php ーーー 多くなれば、これら条件をその都度プログラムでセットし直してプログラムで実行する。 または検索プログラムで、該当結果を1つのファイルに累積していく。 ーー >Access初心者です、なら後半のプログラムは無理として、SQL文を変更書き込みも出来るかな。

henohenomohe_ji
質問者

お礼

スミマセン。 本当に初心者ですので、書いていただいたことについて行けませんでした。 また、もう少し理解が深まったら、書いていただいたこと見直してみようと 思います。 ご回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

もう一度訂正。何度もすみません。 SELECT クエリ○×町.name, [クエリ○×町]![○×町面積] AS 町面積 FROM クエリ○×町 UNION SELECT クエリ△△町.name, [クエリ△△町]![△△町面積] AS 町面積 FROM クエリ△△町; です。 FROM ○×町 ではなく、 FROM クエリ○×町 でした。

henohenomohe_ji
質問者

補足

以下の方法もご存知でしょうか? クエリ:○×町-A  name ○×町面積  ○×町 123 クエリ:○×町-B  name ○×町面積  ○×町 345 クエリ:△△町-A  name ○×町面積  ○×町 567 クエリ:△△町-B  name ○×町面積  ○×町 789 これを以下のようにまとめる方法があるでしょうか?  name 町面積A 町面積B  ○×町  123  345  △△町 567  789

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

#1です。 クエリのSQL文の中で、 SELECT クエリ○×町.name, [クエリ○×町]![○×町面積] AS 町面積 FROM ○×町 UNION SELECT クエリ△△町.name, [クエリ△△町]![△△町面] AS 町面積 FROM クエリ△△町; 以下の、 [クエリ△△町]![△△町面] のところを [クエリ△△町]![△△町面積] にしてください。「積」が抜けていました。したがって、 SELECT クエリ○×町.name, [クエリ○×町]![○×町面積] AS 町面積 FROM ○×町 UNION SELECT クエリ△△町.name, [クエリ△△町]![△△町面積] AS 町面積 FROM クエリ△△町; になります。このクエリの作り方は、新しいクエリを デザインビューで開き、SQLビューに変更して、 上記のSQL文をコピーし、貼り付け適当な名前で 保存します。

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

クエリ名が クエリ:○×町 と クエリ△△町 のように統一されていないので、こちらで それぞれ、 クエリ○×町 クエリ△△町 としました。ユニオンクエリを使います。 SELECT クエリ○×町.name, [クエリ○×町]![○×町面積] AS 町面積 FROM ○×町 UNION SELECT クエリ△△町.name, [クエリ△△町]![△△町面] AS 町面積 FROM クエリ△△町; 二つのクエリのそれぞれの面積のところを町面積 に名前を付け替えて表示し、二つのクエリを 結合させます。

すると、全ての回答が全文表示されます。

関連するQ&A