• ベストアンサー

VBA 複数のCSVファイルを一度にインポートするには?

お世話になります ■概要 Accessのボタンで複数のCSVファイルを一括にひとつのテーブルにインポートさせたいのですが ■内容 テキストボックス、参照ボタン、実行ボタンをフォーム上に設置 参照ボタンでダイアログボックスを表示させCSV複数選択し 選択内容がテキストへ反映。 実行ボタンで選択された複数CSVをインポートさせたいです 当方初心者なのでVBA等の回答があれば幸いです ご教授よろしくお願い致します。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#3です。 当方、Access2000ですので、WindowsAPIのお世話にならないと、ファイル選択のダイアログが使えません。 http://www.accessclub.jp/samplefile/samplefile_78.htm を改造して、複数選択可能にした事がありますが、2002以降の方には意味がありません。 参考URLはご参考になりませんか。検証できる環境がないので、外していたらすみません。 >.AllowMultiSelect = true に変更して、複数選択可能にしてやると >For each varSelectedFile In .SelectedItems 略 >Next の所で、選択したファイルに対して、順次処理が出来ると思います。 >テキストボックス内にファイル名を書き込み を行う必要は無いと思いますが、いかがでしょう。

参考URL:
http://www.accessclub.jp/samplefile/samplefile_159.htm
BSR123
質問者

補足

返事ありがとうございます 複数選択を実行できたとしてもテキストボックスには 1ファイルパスしか記載されず実行も当然1ファイル文です 妥協したとしてテキストファイルなしの状態での 実際どのように組み合わせればよいかご教授願います '最初に開くホルダーを当ファイルのフォルダーとします。 .InitialFileName = CurrentProject.Path If .Show = -1 Then 'ファイルが選択されれば -1 を返します。 For Each varSelectedFile In .SelectedItems FileSelect = varSelectedFile Next 'このぶぶんに何かを記載する? End If

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

参考URLの記事を見つけました。これはワード文書の事例ですが、csvもテキストファイルとして処理すれば、選択ファイルを一時ファイルに統合できると思います。(それから一括インポート) 残念ながら、ODC_FileDlgObjs.exe サンプル コードに辿り着けません。英文のダウンロードセンターで検索してもヒットしません。中途半端になってしまいましたが、ご参考まで。 もちろん、取得した複数ファイルの情報に対して、ループ処理して次々にインポートして、追記するのが素直でしょうが。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc326127.aspx#odc_filedlgobjs_example
BSR123
質問者

補足

ですよね Dim MyPath As String Dim MyFile As String Dim MyName As String MyPath = "C:/" '【データ保存先バスの設定】 MyFile = MyPath & "*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(MyPath & MyName) <> vbDirectory Then DoCmd.TransferText acImportDelim, "インポート定義名", "テーブル名", MyPath & MyName, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop 参考URLhttp://penhagi.com/access/ota2004/3207.htm 上記をどのようにすればダイアログ表示 テキストボックス内にファイル名を書き込み実行ボタンで吸い上げさせるかわかりません

  • kosamon
  • ベストアンサー率47% (11/23)
回答No.2

うーん、何故同じ質問を繰り返して無駄にトピを増やすのですか? http://okwave.jp/qa3965156.html こちらのNo1で >こちらについてはdir関数で とありますが、これについて少しは調べてみましたか? >実行ボタンで選択された複数CSVをインポートさせたいです ファイルが複数ある場合は、その都度インポートするのでは無く 一旦一まとめにしてからインポート、という手段もあります。 Line Inputステートメントについて調べてみると良いでしょう。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

アクセスの質問ですか。 >当方初心者なのでVBA等の回答があれば幸いです これは丸投げの質問で規約違反。 少し勉強してから質問すべき。AccessVBAをここで答えられるほど簡単ではないと思う。 ーー アクセスの「マクロ」(VBAではない)で「テキスト変換」というのがあるからこれでも手がかりに、考えたら。 そしてVBA化というかModule化はどうするかに進む。 ーー http://oshiete1.goo.ne.jp/qa1705027.html

BSR123
質問者

補足

imogasiさまお返事ありがとうございます 現状のVBAを表示します imogasiさまならわかるとおもいますのでコードの補助は入れません Private Sub 参照_Click() Dim strFileName As String 'ファイルを開くダイアログを表示 strFileName = GetFile("") If Len(strFileName) > 0 Then Me.テキスト1 = strFileName Else MsgBox "ファイルは選択されていません! End If End Sub Private Sub 実行_Click() TextConv Me.テキスト1, "BフレCSV", "Bフレ" Me.Requery '画面を更新します。 End Sub Sub TextConv(strFle As String, strInp As String, strTbl As String) If MsgBox("インポートしますか?", 4, "実行確認") = vbYes Then DoCmd.TransferText acImportDelim, strInp, strTbl, strFle, False MsgBox "テーブルデータを更新しました" End If End Sub どこを変更するかわかりますか? 尚、手をつけられない解答等はえんりょうくださいね。imogasiさん

関連するQ&A