添付画像のように、レコードをまとめたいのですが、よい方法はありますか?
・画像は両方とも「テーブル1」になってますが、新しくテーブルを作ってもかまいません。
・VBAでもかまいません。各種アクションクエリでもかまいません。
コメント欄は開けておきます。
不足情報があれば請求してください。
回答のオープンは火曜の朝以降になるかもしれません。
よろしくお願いいたします。
※ 方法がない場合、「なし」の回答はお控えください。回答がつかなければ、方法がないものだと思って諦めます。
※ 回答履歴によっては開きませんのでご了承ください。
もっとスマートな方法があるかもしれませんが、とりあえず結果を別テーブルに格納する例です。
テーブル2に結果を入れるので、このテーブルがすでにあるときはコード内のテーブル2を好きな
名前に変更してください。
Option Compare Database Const TMP_TABLE = "テーブル2" '★★★ 結果テーブル名 Sub SELECT_ALL_01() Dim RS As DAO.Recordset readyTempTable Dim orderNum As String Dim productList As String Set RS = CurrentDb.OpenRecordset("SELECT * FROM テーブル1 ORDER BY 注文番号;") Do Until RS.EOF If RS!注文番号 <> orderNum Then If orderNum <> "" Then CurrentDb.Execute ("INSERT INTO " & TMP_TABLE & " ( 注文番号, 商品) VALUES ('" & orderNum & "','" & productList & "');") End If orderNum = RS!注文番号 productList = RS!商品 Else productList = productList & "," & RS!商品 End If RS.MoveNext Loop If orderNum <> "" Then CurrentDb.Execute ("INSERT INTO " & TMP_TABLE & " ( 注文番号, 商品) VALUES ('" & orderNum & "','" & productList & "');") End If ' DoCmd.RunSQL "SELECT * FROM " & TMP_TABLE & " ORDER BY [注文番号];" Set RS = Nothing End Sub Sub readyTempTable() Dim tbl As DAO.TableDef Dim str As String For Each tbl In CurrentDb.TableDefs If tbl.Name = TMP_TABLE Then CurrentDb.Execute ("DELETE FROM " & TMP_TABLE & ";") Exit Sub End If Next CurrentDb.Execute "CREATE TABLE " & TMP_TABLE & " ([注文番号] text(50), [商品] text(200) );" End Sub
実行後、画面が更新されないことがあるかもしれませんが、F5キーを押して最新情報に更新してみてください。
回答ありがとうございます。
じっくり読み解こうと思います。
後ほど結果報告します!
----------
・コンパイルエラー ユーザー定義型は定義されていません。
DAOの参照設定をしてなかったです orz
・readyTempTable内が「FROM句の構文エラー」
テーブル名にハイフンが入っているのが問題かな…ということで、
SELECT_ALL_01内のCurrentDb.OpenRecordset部分のテーブル名と
Const TMP_TABLE のテーブル名を[ ]でくくって対応。
内容も理解しようと思ったのですが、使ったことがないものがいっぱいで、
Do Until や If から、「ここではなんとなくこういうことをやっているんだろう」
程度にしかわかりませんでした。
ですが、今後使う機会が増えそうなので、テストデータをいろいろ作って、
ちょっとずつ改変しながら覚えていこうと思います。
ありがとうございました。
気持ち程度ですが、ポイント上乗せしました^^
とても助かりました。