クエリでは実現できないデータのまとめかた
なので、以下のようにプログラムを組む
必要があります。
各クエリがたとえば、
クエリ:○×町-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
各クエリのデータが一件づつというのは、
余りにも非効率な気がします。、
このようなデータの取り方をしなければ
ならない事情があるならば別ですが、
もしデータが大量にあってこのような
クエリを大量につくらなけらばならないのならば
何をどのようにしたい、ということがわかれば
プログラムだけ、あるいは少しのクエリと
プログラムの組み合わせで十分対応できるのでは
と思います。
なお、提示したプログラムはあくまでも各クエリが
データを一件づつしかもたない場合に限定されます。
一件ではない場合は、クエリの作り方とコードを
変更する必要があります。そのあたりは、いかがですか。
お礼
お礼が遅くなって申し訳ありません。 教えていただいたこと実現できました、ありがとうございます。 やりたいことが少し複雑になるだけで、こんなにいろいろと 手数が必要になるのですね。 初心者の私には、教えていただいたことを実現するのが精一杯 で、とても自力でできるほど理解できていません。^^; 教えていただいたおかげで、Accessの理解が少し深まりました。 何度も回答いただきまして、本当にありがとうございました。