• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessコピーについて(お願いします))

Accessコピーの方法とは?

このQ&Aのポイント
  • AccessVBA初心者のため、テーブル1のデータをテーブル2に回数分コピーする方法を教えてください。
  • VBAを使用して、SQL文を使わずにAccessのテーブル1のデータをテーブル2にコピーする方法を教えてください。
  • テーブル1とテーブル2のデータ構造は同じで、テーブル2はデータが空です。テーブル1のデータをテーブル2に回数分コピーする方法を教えてください。

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

  • ベストアンサー
回答No.1

SQL文を使用しないで作るのは難しいかと。 回数フィールドが数値型、IDがオートナンバー型という前提だと Dim db as DAO.Database Dim rs as DAO.Recordset Dim i As Integer Set db = CurrentDB Set rs = db.OpenRecordSet("SELECT * FROM [テーブル1]",dbOpenSnapshot) Do Until rs.EOF For i=1 To rs.Fields("回数").Value db.Execute "INSERT INTO [テーブル2] ([氏名],[回数]) VALUES '" & rs.Fields("氏名").Value & "'," & rs.Fields("回数").Value Next i rs.MoveNext Loop rs.Close db.close DAOを使った場合はこんな感じかと

sky070
質問者

お礼

どうもありがとうございます。さっそくテストして、改めてお礼申し上げます。

sky070
質問者

補足

SQLまだ勉強したことないです、私、ほんの少しSQL知識なので、入門もいえないレベルです。いずれ勉強しないといけないですが、頑張ります。 ところで、hosohoso13さんが書いてくれた文をさっそくテストした結果ですが、 db.Execute "INSERT INTO [テーブル2] ([氏名],[回数]) VALUES '" & rs.Fields("氏名").Value & "'," & rs.Fields("回数").Value こちら辺がずっとエラーでます。  まだ参考書みながら考えてみます。 ありがとうございました。

その他の回答 (1)

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.2

ADOではこういう感じです。 処理自体はhosohoso13さんと同じです。 Public Sub CopyTable() Dim cnc As New ADODB.Connection Dim rst1 As New ADODB.Recordset Dim rst2 As New ADODB.Recordset Set cnc = CurrentProject.Connection rst1.Open "テーブル1", cnc, adOpenKeyset, adLockPessimistic, adCmdTableDirect rst2.Open "テーブル2", cnc, adOpenKeyset, adLockPessimistic, adCmdTableDirect Do Until rst1.EOF For i = 1 To rst1!回数 rst2.AddNew rst2!名前 = rst1!名前 rst2!回数 = rst1!回数 rst2.Update Next rst1.MoveNext Loop rst1.Close: Set rst1 = Nothing rst2.Close: Set rst2 = Nothing cnc.Close: Set cnc = Nothing End Sub

この投稿のマルチメディアは削除されているためご覧いただけません。
sky070
質問者

お礼

どうもありがとうございます。さっそくテストして、改めてお礼申し上げます。

sky070
質問者

補足

shut0325さんが教えてくれた内容をテストの結果、すんなりいきました。  VBA勉強しはじめて、まだ日があさいので、 Connection adOpenKeyset, adLockPessimistic, adCmdTableDirect : Set rst1 = Nothing 部分いろいろ調べましたが、よく解らないです。 自分なりにすこし編集した結果↓ Private Sub コマンド0_Click() Dim cnc As Database Dim rst1 As Recordset Dim rst2 As Recordset Dim i As Integer Set cnc = CurrentDb Set rst1 = cnc.OpenRecordset("テーブル1") Set rst2 = cnc.OpenRecordset("テーブル2") rst1.MoveFirst Do Until rst1.EOF For i = 1 To rst1!回数 rst2.AddNew rst2!名前 = rst1!名前 rst2!回数 = rst1!回数 rst2.Update Next rst1.MoveNext Loop MsgBox "回数分コピーできました。", vbExclamation rst1.Close rst2.Close cnc.Close End Sub これでもいけました。大変参考になりました。ありがとうございます。