• ベストアンサー

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

  • ACCESS2007のクエリについて

    ACCESS2007のクエリについて ACCESS初心者です。 よろしくお願いします。 クエリを作成するときに、デザインビューでフィールドの位置を変更したり、 (たとえば、「氏名」の列を4列目から2列目に移動する) 並べ替えなどをして、データシートビューにすると反映されているのに、 データシートビューでフィールドの位置を変更したり、並べ替えなどをしても、 デザインビューには反映されてませんが、 クエリとはこういうものなのですか?

  • Access 2003、2007 なぜクロス集計クエリだけクエリパラメータを設定しないといけないのか?

    Accessで、なぜクロス集計クエリだけクエリパラメータを設定しないといけないのでしょうか? 普通の選択クエリなどでパラメータクエリを作る時は抽出条件に[ ]を記入するだけで作成できますが、クロス集計クエリでパラメータクエリを作ろうとすれば、クエリパラメータでダイアログボックスの文字列とデータ型を指定しなければいけません。 これはなぜなのでしょうか?

  • Accessでクエリを作成したら・・・

    Accessでクエリを作成したら「式で型が一致しません」のエラーが出て、ヘルプには「JOIN式でデータ型の異なるフィールドを使用して2つのテーブルを結合しようとしています。」とありますが、意味がわかりません。自分ではどちらも同じ数字(コード)で結合しているつもりです。宜しくお願いします。

  • ACCESSのクエリの中でのクエリ指定

    ACCESSのクエリで複数テーブルを結合させ明細表示させました。 その明細作成クエリーを更にそのクエリをテーブルと指定して 合計のクエリを作成して結果を確認すると合計が違っていました。 確認の為、集計を取りその明細クエリーをクエリー上でテーブル 指定してみたところ、元の明細クエリーのみの場合とレコード数 がかわっって表示されまました。 クエリーのテーブルにクエリを指定するのはNGなのでしょうか。 何方かなぜそうなるのか、また、正しい方法があれば教えてください。 宜しくお願いします。

  • Access2003 クエリで、空の列は作れますか?

    Access2003で、クエリを作成しています。 その作成したクエリを、Excelにエクスポートして編集作業を行います。 Excelでの編集作業で、新たに列を3列ほど挿入する必要がありますが、出来ればクエリの段階で、タイトル名だけ付けて、3列空けた状態にしておきたいです(挿入列も、連続で無い為)。 しかし、ただ単に列を挿入することができません。 無理なのでしょうか?

  • アクセスのクエリーのことで教えてください

     テーブル1とテーブル2があってクエリーでリレーションシップを組むときに  結合プロパティを「テーブル1の全レコードと、テーブル2の同じ結合フィールドのレコードだけを含める。」にして表を作ろうとしたのですが、テーブル2に レコードが無い場合、テーブル1,2を使って作ったクエリー1で表を作り、 ビルドでクエリー1の項目を貼り付けて、計算させると、テーブル2にレコードが無いと空欄になっているためか、計算がうまく行きません。この問題を解決するにはどのような方法をとればよいですか? ほんとにこまったちゃんになっているので教えてください。 

  • Accessのクエリ(テーブルの結合)

    Accessのクエリで以下のようなものを作成したいのですが、SQL文がわかりません。 ↓ tblA,tblB,tblC はそれぞれ同じ項目(AAA,Cnt(AAAの値別カウント数)、日付)を持っています。 tblA,tblB,tblC を全部結合して、日付、AAAでグルーピングしたカウントを取りたいのですが、 どのようなクエリ文になるのでしょうか? また、Oracleでいうunion all関数はないのですか? よろしくお願いします。

  • アクセスクエリ

    アクセスクエリのフィールド MS-accessのクエリで質問です クエリで、3つのテーブルがあります。 どのテーブルのフィールドにも[売上]があります。 この3つのテーブルの[売上] フィールド1列に表示させる方法はありませんか

  • Accessのクエリ 抽出条件について

    Accessのクエリ 抽出条件について Accessクエリのフィールドに納品日、検収日、納期検収変更日があり、これらで抽出条件を設定したいのですが、どうしていいか判りません。 抽出条件等の例を画像添付しますので、どうように設定すれば良いか? 具体的に教えて頂けると助かります。 フォームにも同じ項目を作成しています。

  • メモ型同士でクエリでつなぐことはできない?

    アクセスのテーブルのデータ型は メモ型同士でクエリでつなぐことはできないのでしょうか? テーブル1 ID 内容(メモ型) テーブル2 ID 内容(メモ型) で、メモ型で同じ文字列が入ってるのが複数あるので それらをクエリでつなぎたいのですが メモ型またはOLEオブジェクト型のフィールドを結合する事ができません。 ってなってしまうのですが、 400文字くらいの値同士をつなげたい場合はどうすればいいでしょうか?

専門家に質問してみよう