人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Access2003での質問です。
以下のようなテーブルがあります。

id , data
1 , A
1 , B
1 , C
2 , D
2 , E
3 , F
3 , G
3 , H
3 , I

このテーブルから以下を導きたいと思っています。
1 , A.B.C
2 , D.E
3 , F.G.H.I

クエリでもSQLでもVBAでも何でも可です。
以上よろしくお願いします。

●質問者: SOBA
●カテゴリ:コンピュータ
✍キーワード:SQL VBA クエリ
○ 状態 :終了
└ 回答数 : 1/2件

▽最新の回答へ

1 ● Mook
●100ポイント ベストアンサー

コメントで紹介したのは ACCESS を使用した例ですが、なんでもありという前提で、EXCEL での例です。

最初に参照設定をし、実際のmdbファイル名に変更して実行ください。

Option Explicit

'--------------------------------------------------------------------------
' ★★ 参照設定「Microsoft Active Data Object x.x Library : たぶん最新でOK
'--------------------------------------------------------------------------

Sub MyConcatQuery()
 Dim conn
 Set conn = CreateObject("ADODB.Connection")
 conn.Open "Provider=Microsoft.ACE.oledb.12.0;Data Source=D:\soba.mdb;" ' ★★ mdb ファイル名

'-------------------------------------
' 最初に id を取得
'-------------------------------------
 Dim strSQL As String
 strSQL = "SELECT DISTINCT id FROM soba ORDER BY id;" '★★実際のテーブル名、フィールド名に変更
 
 Dim rs
 Set rs = CreateObject("ADODB.Recordset")
 rs.Open strSQL, conn, adOpenKeyset, adLockReadOnly
 
 Dim r As Long
 Range("A1:B1") = Array("id", "data")
 r = 2
 Do Until rs.EOF
 Cells(r, "A").Value = rs.Fields(0).Value
 rs.MoveNext
 r = r + 1
 Loop
 rs.Close
 
'-------------------------------------
' 次に id ごとに data を取得
'-------------------------------------
 Dim lastRow As Long
 Dim res As String
 lastRow = r - 1
 For r = 2 To lastRow
 strSQL = "SELECT data FROM soba WHERE id = " & Cells(r, "A") & ";" '★★実際のテーブル名、フィールド名に変更
 rs.Open strSQL, conn, adOpenKeyset, adLockReadOnly
 res = ""
 Do Until rs.EOF
 res = res & "." & rs.Fields(0).Value
 rs.MoveNext
 Loop
 rs.Close
 Cells(r, "B").Value = Mid(res, 2, 1000)
 Next
End Sub

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_030.html

◎質問者からの返答

なるほど!

参考になります。ありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ