dポイントプレゼントキャンペーン実施中!

Access2000かExcelファイルのデータを取得したいのですが、
Excelファイルを一度 CSVファイルに変換し、その後Accessのテーブルへデータ取り込み といった手順をとりたいのです。
この方法って、どうコーディングすればいいのですか?
(Accessのインポート処理は使用しない方法です)

A 回答 (5件)

VBAの基本的なことはご存知ですか?


でしたら、
1.Accessで対象のExcelファイルを選択
2.AccessからExcelを制御してCSVにコンバート
3.出来たCSVファイルをAccessに取り込む(テキスト取り込み インポート定義を使うと簡単)
この順序で行えばOKです。
ExcelでVBAを書くことで制御する方法もありますが、
Access側からExcelを制御する方がやりやすいと思います。

この回答への補足

AccessからExcelファイルを選択することは出来ました!

> 2.AccessからExcelを制御してCSVにコンバート

この方法はAccessから制御してしまえば良いわけですね?
Excelファイルを複数指定した場合は、取込処理を複数回行えばいけそうですね。

補足日時:2005/03/28 09:10
    • good
    • 0

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製品同士で、互換性?があるのに、使わないなんて勿体無いかな…と思って。
    • good
    • 0

#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で検索してみてください。基本パターンは決まっていますから。
    • good
    • 0

No1です。



>AccessからExcelファイルを選択することは出来ました!
=====
良かったです!

>> 2.AccessからExcelを制御してCSVにコンバート
>この方法はAccessから制御してしまえば良いわけですね?

>Excelファイルを複数指定した場合は、取込処理を複数回行えばいけそうですね。
=====
その通りです。Accessから制御しちゃってください。
もしVBAのコードがわかりづらかったら、
Excelでキーボードマクロを保存して、それをExcelのVBAとして出力、
そのコードを参考にAccess側でコーディング、
という手順が楽ですョ。
ファイル名を配列に格納して、その数だけループさせれば複数ファイルも可能ですし、
シート数の取得が可能ですから取りこむシートが1ファイルに複数あってもOKです。

CSVまで出来ちゃえば後は、インポート定義を使用してテキストインポートで終了です。

もし細かいところが解らなかったら前後のソースを補足として入れてみてください。

頑張ってくださいネ!
    • good
    • 0

Accessから、Excelのデータを取得したい場合、EXCELをCSVに変換する必要はないと思いますよ。



『Accessのインポート処理は使用しない方法』とありますが、Accessのインポート機能(手動でインポートする)ことはしない…ってことでしょうか?

例えば、AccessとExcelならば、リンクできます。リンクすれば、テーブルとして使用できます。
(ただしExcelのファイル名等固定になります)

もしくは、VBAで、ボタンを押したらExcel自動インポートって事もできますよ。

もう少し詳しいことが分かれば、明確な返答ができると思います☆

この回答への補足

取込処理を全て自動させたいのです。
(AccessよりExcelファイル選択→Accessのテーブルデータ)
この際、取り込むExcelは複数を選択させたいです。

補足日時:2005/03/28 09:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!