- ベストアンサー
[Access]異なるレコード間の文字列連結
いつもお世話になっております。 早速ですがAccess(初心者です)での質問です。 以下のようなテーブルがあります。 ID|番号(1)|番号(2)|実績 1 |113355 |AA| 152 2 |112211 |VV| 27 3 |112222 |VV| 90 4 |113355 |CX| 8 5 |112222 |SD| 110 ………………・・・(以下略) 番号(1)が同じなら、番号(2)を"/"で区切り、連結して 別のテーブルを作成しようとしています。 ID|番号(1)|番号(2) 1 |113355 |AA/CX 2 |112211 |VV 3 |112222 |VV/SD ………………・・・ が、なかなか良い方法が思いつきません。 皆様のお力を貸してください。どうぞ宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VBAを使って、レコードを1件ずつ読み込んで書き込むというやり方が良いんじゃないかと思います。 考え方としては、 元のテーブルで番号(1)を基準に並べ替えをする 元のテーブルの最初のレコードから順に番号(1)の値を比較しながら番号(2)を書き込んでいくようにする 手作業でやるとしたら、 元のテーブルをそのままコピーする 番号(1)で並べ替えをする レコードを見ながら番号(2)を書き換える 番号(2)が書き終わったら番号(1)のダブっているレコードを削除する
その他の回答 (1)
- keikan
- ベストアンサー率42% (75/176)
趣旨がずれますが、 まず、元のテーブルからクエリーを使って番号1に対して集計します。(番号1に対しての重複を省きます)・・・クエリー1とします。 このクエリー1を親としてフォームなり、レポートなりを作成します。 それらに、元のテーブルを持つサブフォーム/サブレポート作成して、番号1でリンクすれば番号1に対する番号2のリストができ、実績の集計も可能になります。 番号2がもともと何に使われるのかその後の実績が何を意味するのかわかりませんが、レコードとして扱えるようにしておいた方がデータの利用価値が上がります。 あとは、#1さんの用にコードを書かないと解決しないかもです。 クエリーの項目として下記関数を割り当ててください。 Function NO2(NO1 As String) As String Dim cdb As Database Dim rst As Recordset Dim tmp As String Dim sqlstr As String tmp = "" Set cdb = CurrentDb Set rst = cdb.OpenRecordset("元のテーブル名", dbOpenDynaset) sqlstr = "[番号(1)] = '" & NO1 & "'" rst.FindFirst sqlstr If Not rst.NoMatch Then tmp = rst![番号(2)] rst.FindNext sqlstr End If While (Not rst.NoMatch) tmp = tmp & "/" & rst![番号(2)] rst.FindNext sqlstr Wend NO2 = tmp rst.Close cdb.Close End Function でもこれすごい遅いですよきっと^^;;
お礼
ykmtk さま、keikan さま、アドバイスありがとうございました。 番号(1) = Trim(tb1![番号(1)]) 番号(2) = Trim(tb1![番号(2)]) tb1.MoveNext Do 番号(1') = Trim(tb1![番号(1)]) If 番号(1) = 番号(1') Then 'If 番号(2') <> Trim(tb1![番号(2)]) Then 番号(2') = Trim(tb1![番号(2)]) If 番号(2') <> 番号(2) Then '番号(2') = Trim(tb1![番号(2)]) If 番号(2') <> "" Then 番号(2) = 番号(2) & "/" & 番号(2') Else 番号(2) = 番号(2) End If End If Else tb2.AddNew tb2![番号(1)] = 番号(1) tb2![番号(2)] = 番号(2) tb2.Update 番号(1) = 番号(1') 番号(2) = Trim(tb1![番号(2)]) End If tb1.MoveNext Loop Until tb1.EOF tb2.AddNew tb2![番号(1)] = 番号(1) tb2![番号(2)] = 番号(2) tb2.Update とし、tb2への転記ができました。 どうもありがとうございました。