• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS2010 SQLでデータの統合)

ACCESS2010 SQLでデータの統合

piroin654の回答

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

直接テーブルに書き込むこともできますが、安全を 考えて、新しいテーブルにデータをすべて書き出す ことにしました。 質問のテーブル名を「Tポータルサイト」とします。 準備として「Tポータルサイト」と同じ構造の 空のテーブルを一つ用意をしておいてください。 名前を「T書き込み用」とします。 そのとき、フィールドの数を適当に増やして置いて ください。見た目は同じでも空白や改行コードが 入っていると違うデータとして判断します。どちらかと 言えば、目いっぱい設定しておくほうがいいかもしれません。 たとえば、yahoo! というポータル名がたくさん存在 するならばそれだけ一目では分かりにくいデータ が紛れ込んでいる可能性もあります。 なお、フィールド名は先頭の「ポータル名」だけは 固定で、あとはどのようなフィールド名でも かまわないようになっています。「ポータル名」 も実際に合わせて変更してください。 もし、実行後、データの抽出数が予定より 多い場合は、たとえば、 SELECT * FROM Tポータルサイト WHERE (((Tポータルサイト.ポータルサイト名)="yahoo!")); のように、特定のポータルサイト名を指定して確認、修正も できます。 では、以下のコードを実行してみてください。 一応、DAOで記述しています。 なお、参照設定で Microsoft Scripting Runtime にチェックを入れてください。DAOのチェックの確認も。 Sub testポータル() Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim rs3 As DAO.Recordset Dim strSQL As String Dim dic As Object Dim v As Variant Dim k As Variant Dim i As Long Dim j As Long 'テーブルのポータルサイト名の名寄せのSQL文 strSQL = "SELECT ポータルサイト名 FROM Tポータルサイト GROUP BY ポータルサイト名;" Set db = CurrentDb Set rs1 = db.OpenRecordset("Tポータルサイト") Set rs2 = db.OpenRecordset(strSQL) Set rs3 = db.OpenRecordset("T書き込み用", dbOpenDynaset) Set dic = CreateObject("Scripting.Dictionary") If rs2.RecordCount > 0 Then rs2.MoveFirst Do Until rs2.EOF If rs1.RecordCount > 0 Then rs1.MoveFirst Do Until rs1.EOF For i = 0 To rs1.Fields.Count - 1 v = rs1.Fields(i).Value If rs2!ポータルサイト名 = rs1!ポータルサイト名 Then '配列へデータ格納 If Not IsNull(rs1.Fields(i)) Then If Not dic.Exists(v) Then dic.Add v, v End If End If End If Next i rs1.MoveNext Loop End If 'テーブルへデータの書き込み k = dic.Keys rs3.AddNew For j = 0 To dic.Count - 1 rs3.Fields(j) = k(j) Next j rs3.Update dic.RemoveAll rs2.MoveNext Loop End If Set dic = Nothing rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing rs3.Close: Set rs3 = Nothing db.Close: Set db = Nothing End Sub

xoxo_jj
質問者

お礼

早速、教えていただいたとおりに実行してみました! まさしくやりたかった通りの結果になりなりました!! また、別テーブルしていただいたり、抽出量が多かった場合の事も考量いただき 大変感謝しております。 数日かけて色々試してみましたがなかなかうまくいかずとても困っておりました。 世の中には本当に凄い人がいるもんだと感動しております。 教えていただいたものをすべて理解できるようにこれからも勉強していきたいと思います。 本当にありがとうございました!!