• ベストアンサー

Access クエリの作り方について

Access2016を使っています。 画像のように、項目2の文字列を結合させる形でクエリを作成できないでしょうか。

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

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

項目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];

jupiter142800
質問者

お礼

やってみたら成功しました! 素晴らしいです、完璧にうまくいきました。 クエリのSQLに自作の関数を使うことができるとは知りませんでした。 大変勉強になりました。 本当にありがとうございました。

その他の回答 (1)

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

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 をいれておきます。

jupiter142800
質問者

お礼

細やかな仕様のご配慮、大変ありがとうございます。

関連するQ&A