- ベストアンサー
Excel→Access VBAによるインポート
- Excel2000で作成したファイルの複数のデータシートをAccess2000にインポートする方法について説明します。
- Excelファイルのすべてのシートからデータをインポートし、Sheet名がついたテーブルに格納する方法を紹介します。
- VBAを使って自動化することで、毎月発生する作業や他のユーザが行う必要がある場合でも簡単にインポートできます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
しょっぱなから動かないのは参照設定の問題でしょう。 アクセスで他のDLLファイルを利用した機能を使うときに必要です。 http://www.accessclub.jp/beginer/tips/tips_32.htm フィールド名の部分はより具体的に書くなら こんな感じになります。 --- With rst .AddNew !氏名 = "太郎" !住所 = "東京都" .Update End With --- これであるテーブルの氏名欄に「太郎」住所欄に「東京都」が入る訳です。 で今回の場合はエクセルのとあるシートのとあるセルの値がアクセスのテーブルに入るんですよね? ですから "太郎"の部分が、Worksheets("Sheet1").Range("A1")とかになる訳で。 ループや変数扱い方がよく分からないのなら全て決め打ちにするしかないでしょう !氏名 = Worksheets("Sheet1").Range("A1") !住所 = Worksheets("Sheet1").Range("A2") !電話 = Worksheets("Sheet1").Range("A3") というような感じで。 よく分かるようになったら数行でまとめられるようになります。が流石にそれは自分で勉強して下さい。
その他の回答 (1)
- popesyu
- ベストアンサー率36% (1782/4883)
まぁアプローチの方法はいろいろあるんですけど。 おそらく一番簡単な方法である「DAO」で。 Dim dbs As database Dim rst As Recordset Set dbs = OpenDatabase("アクセスファイルへのパス") Set rst = dbs.OpenRecordset("テーブル名", dbOpenTable) '「テーブル名」は自分でつけたテーブルの名前 '「アクセルへのパスは」「C:\test\test.mdb」とかこんな感じ。 With rst .AddNew !フィールド名1 = Range("A1").Value) !フィールド名2 = Range("B1").Value) .Update End With 'フィールド名はテーブルの項目名のこと '実際はWith内のコードはループさせたりするほうが便利 'Range("A1")の部分も該当部に修正。こちらも上と同様変数にした方が便利。 rst.Close Set rst = Nothing Set dbs = Nothing 'お約束の終了宣言 --- ループや変数の扱いについてはVBAに限らずプログラムの基礎ですので、ここぐらいは独学でも勉強された方が良いかと思います。
補足
popesyuさん、お返事ありがとうございます。 返事が遅くなり申し訳ありません。 ええと、これはExcelに記述するコードですね? 試したところ、一行目で「コンパイルエラー:ユーザー定義型は定義されていません」 と怒られてしまいました。 ここから先に進めません。 あと、"!フィールド名1"の個所ですが、ここも今ひとつ分かっていません。 良きアドバイスをお待ちしております。
お礼
ご指摘のとおり、ライブラリにDAOが組み込まれていませんでした。 組み込み後は動くようになりました。 まだ完成にはほど遠いですが、いったんクローズします。