- ベストアンサー
AccessからExcelファイルのデータ取得
Access2000かExcelファイルのデータを取得したいのですが、 Excelファイルを一度 CSVファイルに変換し、その後Accessのテーブルへデータ取り込み といった手順をとりたいのです。 この方法って、どうコーディングすればいいのですか? (Accessのインポート処理は使用しない方法です)
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VBAの基本的なことはご存知ですか? でしたら、 1.Accessで対象のExcelファイルを選択 2.AccessからExcelを制御してCSVにコンバート 3.出来たCSVファイルをAccessに取り込む(テキスト取り込み インポート定義を使うと簡単) この順序で行えばOKです。 ExcelでVBAを書くことで制御する方法もありますが、 Access側からExcelを制御する方がやりやすいと思います。
その他の回答 (4)
- chiharuK
- ベストアンサー率0% (0/1)
VBAでの制御になりますが、 Excelをインポートするには、「TransferSpreadsheet」使って、インポートできます。 (Excelをそのままインポート) Excelの項目(セル)に該当するテーブルを作成しておき、そのテーブルへ直接インポートすることができます。 --- DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "インポート先のテーブル名", "Excelへの絶対パス", , "シート名" --- ※シート名は、指定しなければ1シート目がインポートされます。 もしシートが複数あるのなら、ADOか、DAO等でExcelに接続して、「TableDefs(0).Name」で、シート名も取得できます。 --- '■Excelデータベースへ接続 Dim xDB As Database Set xDB = OpenDatabase("Excelへの絶対パス", False, True, "Excel 8.0;") '■1シート目の名称取得 Dim F_Name As String F_Name = xDB.TableDefs(0).Name '(先頭に[']文字、最後に[$']文字が付くので省く) F_Name = Mid(F_Name, 2, (Len(F_Name) - 3)) --- TableDefs(1)にすれば、2シート目のシート名を取得できます。 NO4の方が言われている通り、ADOで直接接続すれば、わざわざインポートする必要はないです。 でも、ADOを使ってない人には、難しいですよね。 あ、別にCSV変換する手法が悪い!と言っているのではないです。 Office製品同士で、互換性?があるのに、使わないなんて勿体無いかな…と思って。
- Wendy02
- ベストアンサー率57% (3570/6232)
#2さんのように、私も、CSV変換は感心しませんね。Excelのブックからデータを直接取る時は、以下のようにADO を使えば簡単にデータを取れます。複数のExcelのブックがあっても、ファイル名を変えれば済みます。Excelは、データベースフォーマットとして、使用できるからです。 例: Sub Test_ExcelConnect() Dim cnADO As New ADODB.Connection mySource = "C:\TEST1.xls" 'Excelブック名 With cnADO .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & mySource & ";" & _ "Extended Properties=Excel 8.0;" .Open End With 後は、Recordset で、フィールドを調べて、取り出していけばよいと思います。 VBAに慣れていなければ、ADOで検索してみてください。基本パターンは決まっていますから。
- puzou
- ベストアンサー率35% (102/284)
No1です。 >AccessからExcelファイルを選択することは出来ました! ===== 良かったです! >> 2.AccessからExcelを制御してCSVにコンバート >この方法はAccessから制御してしまえば良いわけですね? >Excelファイルを複数指定した場合は、取込処理を複数回行えばいけそうですね。 ===== その通りです。Accessから制御しちゃってください。 もしVBAのコードがわかりづらかったら、 Excelでキーボードマクロを保存して、それをExcelのVBAとして出力、 そのコードを参考にAccess側でコーディング、 という手順が楽ですョ。 ファイル名を配列に格納して、その数だけループさせれば複数ファイルも可能ですし、 シート数の取得が可能ですから取りこむシートが1ファイルに複数あってもOKです。 CSVまで出来ちゃえば後は、インポート定義を使用してテキストインポートで終了です。 もし細かいところが解らなかったら前後のソースを補足として入れてみてください。 頑張ってくださいネ!
- chiharuK
- ベストアンサー率0% (0/1)
Accessから、Excelのデータを取得したい場合、EXCELをCSVに変換する必要はないと思いますよ。 『Accessのインポート処理は使用しない方法』とありますが、Accessのインポート機能(手動でインポートする)ことはしない…ってことでしょうか? 例えば、AccessとExcelならば、リンクできます。リンクすれば、テーブルとして使用できます。 (ただしExcelのファイル名等固定になります) もしくは、VBAで、ボタンを押したらExcel自動インポートって事もできますよ。 もう少し詳しいことが分かれば、明確な返答ができると思います☆
補足
取込処理を全て自動させたいのです。 (AccessよりExcelファイル選択→Accessのテーブルデータ) この際、取り込むExcelは複数を選択させたいです。
補足
AccessからExcelファイルを選択することは出来ました! > 2.AccessからExcelを制御してCSVにコンバート この方法はAccessから制御してしまえば良いわけですね? Excelファイルを複数指定した場合は、取込処理を複数回行えばいけそうですね。