- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
項目1のデータが同じ場合はそれらをすべて 結合するということでいいですか。 結合する場合に、データの並びが問題に なる場合もありますが、一応テーブルの レコードの順序は確定されているものとします。 たとえば、 ID 項目1 項目2 1 あいう abc 2 なにぬ kkk 3 あいう def 4 たちつ ppp 5 あいう ghi のようなテーブルだったらIDというフィールドに 連番が保持されているので項目1が「あいう」の レコードの項目2を順番に結合していけば、 項目1 項目2 あいう abcdefghi のようにするということになります、ということで いいですか。 Accessにはこのような結合をクエリのみで実現する 方法はないので、関数を作成し、その関数とクエリで 表現します。 以下の関数を標準モジュールに貼り付けます。 なお、DAOを使用しているのでコード表の 参照設定で Microsoft DAO xx Object Library にチェックが入っているか確認してください。 xxは数値です。バージョンによって違います。 なお、「項目1」、「項目2」、「テーブル名」は 実際にあわせて変更してください。 Function funcJoin(ByVal strFil As Variant) As Variant Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String Dim buf As Variant strSQL = "SELECT 項目2 FROM テーブル名 WHERE 項目1 = '" & strFil & "';" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL) rs.MoveFirst Do Until rs.EOF buf = buf & rs!項目2 rs.MoveNext Loop funcJoin = buf rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Function なお、 abc def ghi のように間を空けたい場合は buf = buf & rs!項目2 を、 buf = buf & " " & rs!項目2 カンマ切りでつなげたい場合は、 buf = buf & "," & rs!項目2 のようにします。 つぎに、クエリを作成します。以下です。 これをクエリのSQLビューに貼り付ければ 完成です。 select 項目1, funcJoin([項目1]) as 項目2 from テーブル名 group by [項目1];
その他の回答 (1)
- piroin654
- ベストアンサー率75% (692/917)
No1です。 >なお、 >abc def ghi >のように間を空けたい場合は >buf = buf & rs!項目2 >を、 >buf = buf & " " & rs!項目2 >カンマ切りでつなげたい場合は、 >buf = buf & "," & rs!項目2 >のようにします。 の場合は、クエリの結果の先頭に 半角の空白やカンマがつきますので、 これを除くために、関数のおわりころに、 Loop If Len(buf) > 0 Then buf = Mid(buf, 2) End If funcJoin = buf rs.Close: Set rs = Nothing db.Close: Set db = Nothing のように、 If Len(buf) > 0 Then buf = Mid(buf, 2) End If をいれておきます。
お礼
細やかな仕様のご配慮、大変ありがとうございます。
お礼
やってみたら成功しました! 素晴らしいです、完璧にうまくいきました。 クエリのSQLに自作の関数を使うことができるとは知りませんでした。 大変勉強になりました。 本当にありがとうございました。