Accessコピーの方法とは?
- 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 ----------------ーーーー 教えてください。
- sky070
- お礼率92% (24/26)
- オフィス系ソフト
- 回答数2
- ありがとう数3
- みんなの回答 (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 これでもいけました。大変参考になりました。ありがとうございます。
関連する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
- 締切済み
- Access(アクセス)
- 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文とかと同時使用することとなるだろうが…)がわからない。 長文になってしまいましたが、どなたか知恵をお貸しください。
- ベストアンサー
- その他MS Office製品
- 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、カナ氏名、漢字氏名等が入っています。 誰か、助けて~!
- ベストアンサー
- オフィス系ソフト
お礼
どうもありがとうございます。さっそくテストして、改めてお礼申し上げます。
補足
SQLまだ勉強したことないです、私、ほんの少しSQL知識なので、入門もいえないレベルです。いずれ勉強しないといけないですが、頑張ります。 ところで、hosohoso13さんが書いてくれた文をさっそくテストした結果ですが、 db.Execute "INSERT INTO [テーブル2] ([氏名],[回数]) VALUES '" & rs.Fields("氏名").Value & "'," & rs.Fields("回数").Value こちら辺がずっとエラーでます。 まだ参考書みながら考えてみます。 ありがとうございました。