Accessコピーの方法とは?

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

Accessコピーについて(お願いします)

AccessVBA初心者です。  OS XP ACCESS2003 テーブル1とテーブル2 データ構造が同じです。 テーブル2はデータ空です。 テーブル1 ----------------ーー ID  氏名    回数 1  Aさん    2 2  Bさん    3 ----------------ーーーー テーブル1のデータをテーブル2に回数分コピーしたいですが、VBA書き方どうしてもうまくいかないです。SQL文使用しない。 ほしい結果 テーブル2 ----------------ーー ID  氏名    回数 1  Aさん    2 2  Aさん    2 3  Bさん    3 4  Bさん    3 5   Bさん    3 ----------------ーーーー 教えてください。

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

  • ベストアンサー
回答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 これでもいけました。大変参考になりました。ありがとうございます。

関連するQ&A

  • データ処理に関する質問(Access VBAーDAO)

     AccessVBA初心者です。いつもお世話なっております。 環境 OSーXPsp2 office2003 テーブル1とテーブル2あって、テーブル1にデータはいってます。テーブル2は空です。 ACCESS VBA DAOで テーブル1のデータの[店名]、[氏名]を テーブル2に横に追加していきたいです。 テーブル2 構造 ID(オートナンバー)  [店名]1 [氏名]1 [店名]2 [氏名]2  --------------------------------------------------------- テーブル1のデータ ID(オートナンバー)  [店名] [氏名]   1           A    Aさん   2           B     Bさん    3           C     Cさん    4    D       Dさん ----------------------------------------------------- 結果 テーブル2 ID(オートナンバー)  [店名]1 [氏名]1 [店名]2 [氏名]2  1            A   Aさん   B   Bさん 2            C   Cさん   D   Dさん ACCESS VBAでの書く方 教えてください。宜しくお願い足します。

  • エクセルデータをアクセステーブルにコピーするVBA

    エクセルファイル E.xlsxにおいて セルA1=ID A2=氏名 A3=性別 A4=住所 というデータがあるとしまして これをアクセスファイル F.accdbにおける テーブルの table1 その項目が ID, 氏名, 性別, 住所, 卒業校, 旧住所 があります。 このエクセルファイル E.xlsxにおける セルA1=ID A2=氏名 A3=性別 A4=住所 というデータを上記F.accdbにおける テーブルの table1 その項目が ID, 氏名, 性別, 住所,に(卒業校, 旧住所は 新規入力はないこととなります) コピー 追加するVBAを御教示願えますか E.xlsxにおいては1行だけのデータですが、 table1には すでに数行のデータが入力済であり、 IDが新規の場合と、すでにtable1に登録済みのIDが存在する場合に 上書きする場合のそれぞれのVBAを 御教示くださりますと助かる次第です よろしくお願い致します win10 office365

  • VBAでAccessのテーブルのエクスポート・インポートをするには。

    すみませんが、教えてください。 Excel+VBAで、AccessをSQL,ADO,ADOXで操作しようとしています。 a.mdbのテーブルを、b.mdbに、エクスポート(インポート)したいのですが、やり方がわからず困っています。 すみませんが、テーブル構造のみをエクスポートする方法、データを含めてエクスポートする方法を教えてください。

  • ACCESS VBAでのフォームのコピー

    ACCESS VBAでのフォームのコピー OS;WinXP,ACCESS2000 以下のデータベースファイル(ファイルAとする)がある。 テーブル:生産量テーブル フォーム:閲覧フォーム、転送フォームA 生産者テーブルは、毎日のデータを蓄えるもので1か月分ある。 閲覧フォームは、生産量テーブルのデータを見やすく整えたフォーム。 生産量テーブルは1カ月分しかないため、次の月になったら生産量テーブルから 所定のレコード(月によって変わる)のみ抜き出した新しいテーブルBを作成する。 そして新たにデータベースファイルBをVBAで作成し、DoCmd.ObjectCopyで、 ファイルAからファイルBにテーブルBと閲覧フォーム、転送フォームAを コピーしようと考えた。 (1):しかし、転送フォームA上でVBAを用いてコピーしようとすると、 転送フォームAのみ、フォームが開いているのでコピーができない旨のエラーが出る。 (2):転送フォームAを転送フォームBと名前を変えてコピーすることはできるが、 ファイルBを開いたときに名前を転送フォームAに自動で戻さなければならない。 (手動で戻すことはできないとお考えください) (3):(2)の変形版で、ダミーテーブルをコピー時に作ってファイルBに送信し、 ファイルBを開いたときにダミーテーブルがあればこれを消して転送フォームBを 転送フォームAに名称変更することも考えたが、ダミーテーブルがあるか否かを 判定する関数(if文とかと同時使用することとなるだろうが…)がわからない。 長文になってしまいましたが、どなたか知恵をお貸しください。

  • アクセスのクエリで

    テーブルAには、商品コードと数量と金額。 テーブルBには、商品コードと空のフィールド。 テーブルBにAのテーブルを参照して、該当する商品コードの金額を空のフィールドにコピーしたいのですが、どうしたらいいでしょうか。 SQL文で書いて頂いても結構です。 よろしくお願い致します。

  • ExcelからAccessへのコピーする場合

    Access97とExcel2000を利用しています。  例えばaccessで、   テーブルAには  ID と 製品名 のフィールドを設けます。   テーブルBには  ID と 販売個数 というフィールドを設けます。      ここでテーブルA,BのIDは同じものでオートナンバーです。   また、Excelで、  セルA1,A2,A3にはそれぞれ製品名として   チョコレート、キャンディー、ビスケットが入力されています。  まず、ExcelのA1のチョコレートからA3のビスケットを範囲指定しコピーしました。  これをAccessのテーブルAに貼り付けしたいと考えています。 質問は、 Accessに貼り付ける場合、何処にカーソルを運んで貼り付ければ良いのでしょうか。 また、テーブルAにExcelのデータを貼り付けた場合、増えたレコードはテーブルBに反映されるのでしょうか。 初心者です。教えて下さい。  

  • Resource id について

    繰り返しDBの別テーブルにアクセスすると、Resource idという結果が返ってきます。SQL文には問題なさそうなのですが・・原因がわかりません。 Aテーブル  ↓ Bテーブル  ↓ Cテーブル のようにアクセスは無理?? Bまでは行きますがCになるとResource id が返ってきます。 アクセス出来る回数制限ってあるのですか?

    • 締切済み
    • PHP
  • ACCESSクエリでの結合の仕方・・・SQL文かも

    ACCESS 2003を使用しています。 テーブルA テーブルB の2テーブルでクエリを作っています。 結合的には・・・ テーブルAのフィールドX ⇔ テーブルBのフィールドY です。 これで2テーブルに共通する一致データのみ抽出はできるのですが、 2テーブルに共通する一致データに加えて、 2テーブルの不一致データも一緒にクエリ表示されるようにしたいのです。 欲しいのは抽出イメージは、以下のような感じのクエリ結果です。 テーブルA:フィールドX|テーブルBのフィールドY a             |(空) (空)           |b c             |c d             |(空) (空)           |e f              |f  g             |(空) h             |h おそらく、SQL文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

  • ACCESS VBA でテーブルの定義だけコピー

    すみません、VBAをまだ始めたばかりなのですが、 Accessで作成したテーブルをVBAでテーブルの定義のみコピーしたいのです。 調べていたらDoCmd.CopyObjectでコピー出来たのですが、テーブルの中身のデータもコピーされてしまうので困っています。 よろしくお願いします。

  • レコード件数が0件なら印刷をしない。

    おはようございます。 アクセス2000でVBAを書いています。 あるテーブル(テーブルA)を元にレポート(レポートB)を作成しました。テーブルAのレコード件数が0件の時、印刷をさせたくないのですが、うまく書けません。IF文で分岐したいのでよろしくお願いします。 ちなみにテーブルAには顧客ID、カナ氏名、漢字氏名等が入っています。 誰か、助けて~!

専門家に質問してみよう