- ベストアンサー
Accessコピーの方法とは?
- AccessVBA初心者のため、テーブル1のデータをテーブル2に回数分コピーする方法を教えてください。
- VBAを使用して、SQL文を使わずにAccessのテーブル1のデータをテーブル2にコピーする方法を教えてください。
- テーブル1とテーブル2のデータ構造は同じで、テーブル2はデータが空です。テーブル1のデータをテーブル2に回数分コピーする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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を使った場合はこんな感じかと
その他の回答 (1)
- shut0325
- ベストアンサー率40% (490/1207)
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
お礼
どうもありがとうございます。さっそくテストして、改めてお礼申し上げます。
補足
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 これでもいけました。大変参考になりました。ありがとうございます。
お礼
どうもありがとうございます。さっそくテストして、改めてお礼申し上げます。
補足
SQLまだ勉強したことないです、私、ほんの少しSQL知識なので、入門もいえないレベルです。いずれ勉強しないといけないですが、頑張ります。 ところで、hosohoso13さんが書いてくれた文をさっそくテストした結果ですが、 db.Execute "INSERT INTO [テーブル2] ([氏名],[回数]) VALUES '" & rs.Fields("氏名").Value & "'," & rs.Fields("回数").Value こちら辺がずっとエラーでます。 まだ参考書みながら考えてみます。 ありがとうございました。