• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のレコードを1つのレコードにまとめる方法)

複数のレコードを1つのレコードにまとめる方法

このQ&Aのポイント
  • Access2003で、複数のレコードを1つのレコードにまとめる方法について教えてください。
  • 上記のテーブルの特定の項目を結合して1つのフィールドにまとめる方法を知りたいです。
  • クエリを使用して、テーブルの特定の項目をまとめた結果を出力する方法について教えてください。

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

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

見るだけなら、 TRANSFORM First(項目2) AS 値 SELECT 項目1 FROM (SELECT tableA.項目1, tableA.項目2, Count(*) AS Temp番号 FROM tableA INNER JOIN tableA AS TT ON (tableA.項目2 >= TT.項目2) AND (tableA.項目1 = TT.項目1) GROUP BY tableA.項目1, tableA.項目2) AS WW GROUP BY 項目1 PIVOT "項目2" & "-" Temp番号; このクエリからデータを抜き取ってもいいのですが、 方法はそれこそいろいろですが。ベタにレコードセットから。 NoMatchプロパティを利用してもいいのですが、 思いっきりループの入れ子で。 (1) 以下を標準モジュールに貼り付けます。 DAOを使っているので、コード表のツールから 参照設定を選択して、 Microsoft DAO xx Object Library にチェックを入れて、OKとします。xxは3.6のような数字です。 このとき、 Microsoft ActiveX Data Objects xx Library にチェックが入っていたらはずしてください。 Sub test() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim rs3 As Recordset Dim strSQL As String Dim myStr1 As String Dim myStr2 As String strSQL = "SELECT tableA.項目1 FROM tableA GROUP BY tableA.項目1;" Set db = CurrentDb Set rs1 = db.OpenRecordset("tableA") Set rs2 = db.OpenRecordset("結果テーブル", dbOpenDynaset) Set rs3 = db.OpenRecordset(strSQL) If rs3.RecordCount > 0 Then rs3.MoveFirst Do Until rs3.EOF If rs1.RecordCount > 0 Then rs1.MoveFirst Do Until rs1.EOF If rs3!項目1 = rs1!項目1 Then myStr1 = rs1!項目1 myStr2 = myStr2 & " " & rs1!項目2 End If rs1.MoveNext Loop rs3.MoveNext End If rs2.AddNew rs2!項目1 = myStr1 rs2!項目2 = myStr2 rs2.Update myStr1 = "" myStr2 = "" Loop End If rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing rs3.Close: Set rs3 = Nothing db.Close: Set db = Nothing End Sub (2) フォームにコマンドボタンを設定し、そのクリックイベントで Private Sub コマンド0_Click() Call test End Sub 以上です。

osaka-aq
質問者

お礼

お礼が遅くなり申し訳ありません。 非常に分かりやすい説明、ありがとうございました(^^)

その他の回答 (3)

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

YU-TANG さんの、DJoin関数を試されては? DJoin 関数 - リスト文字列を取得する方法 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html Optional delimiter As String = "," Optional delimiter As String = " " にしてみたら半角スペースで区切られるかな・・未検証

回答No.2

クロス集計クエリで出来そうな気がする(未確認)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

クエリやSQLはレコード間(テーブルで別行の間の)の処理が苦手だと思うので、VBAでのレコード処理しか方法で無いのでは。 ADOででも読んでSortする。 http://www.accessclub.jp/ado/22.html ーー 今度は順読みで、同じ部署名の間は、項目フィールドを文字列に結合。 直前レコードの部署と比較して、部署の(コントロール、続き)が切れたら、前の部署と連結文字列を書き出し。文字列を空白にする。(コントロールブレークの処理) そして新部署としての結合処理を繰り返す。 以上をヒントにコードは自分で作ってください。(上記のWEB記事のコードで少し変えるだけ) この方法は同じ部署のレコードを探すやり方より、やさしいやり方でしょう。