こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAフォルダ内ファイル入出力について

Accessで特定のフォルダ内にあるcsvファイルを全て読み込み、別のcsvファイルへ
出力するという処理を作りたいのですが、最近からVBAを始めたばかりで
どうすればよいか分かりません。

とりあえず、特定のファイルをひとつ読み込み、別ファイルへ出力することはできました。


Option Compare Database

Private Sub Button_Click()

Dim No As Integer
Dim buf

No = FreeFile
Open "C:\test1.csv" For Input As #1
Open "C:\test2.csv" For Output As #2

Do Until EOF(No)

Line Input #1, buf
Print #2, buf

Loop

MsgBox "処理終了"

Close #1
Close #2

End Sub


読み込み対象を「特定のフォルダ内のファイル全て」
にする方法が知りたいです。

ちなみに出力先のファイルはひとつにまとめてもそれぞれ別のファイルに
出力でもどちらでも構いません。
できれば両方教えていただければ有難いです。

宜しくお願いします。

投稿日時 - 2012-06-16 23:17:48

QNo.7537591

すぐに回答ほしいです

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

Dir 関数を使います。
詳しくは「VBA DIR」で検索してください。

投稿日時 - 2012-06-17 00:28:48

補足

ご回答ありがとうございます。

Dir関数でファイル名を表示、はできたのですが
その各ファイルの内容を抽出し、別のファイルへ
書きだすという事ができずに困ってます・・・。

投稿日時 - 2012-06-17 01:58:09

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

解決しましたか。

1) エラーの内容はどのようなものですか。
2) CSVファイルの一行目からデータですか。
  あるいは、一行目はフィールド名として
  いますか。

投稿日時 - 2012-06-21 18:42:47

補足

ありがとうございます。

インポートエラーの件は解決いたしました。
取り込み先テーブルのフィールドの型の問題だったようです。

CSVファイルは1行目からデータでカラムなどは入っていません。

とりあえずやりたい事はできたので、質問を締めきりたいと思います。
ありがとうございました!

投稿日時 - 2012-06-21 21:37:18

ANo.2

Dir関数についてはOKそうなので別の問題点についてです。次の3行に問題があります。

No = FreeFile
Open "C:\test1.csv" For Input As #1
Open "C:\test2.csv" For Output As #2

FreeFile関数は「現在使用されていないファイル番号を返す」もので、ファイルをオープンする直前に実行するのが正しい使い方です。今回の例で言うと2つのファイル(入力と出力)を同時にオープンする必要がありますので、ファイル番号も2種類必要になります。なので

【正しい例】
No1 = FreeFile
Open "C:\test1.csv" For Input As #No1
No2 = FreeFile
Open "C:\test2.csv" For Output As #No2

のようにしてやるべきだと思われます。質問文に書かれているコードが問題なく動作するのは「たまたま最初のFreeFileでNoに1が返ってきた」「たまたまファイル番号2が空いていた」という状況だったからです。

(たまたま、と言ってますがFreeFileは1から順番にファイル番号を返してくれるので全てのファイル番号を自分で意識できるならFreeFileを使わずに自力で番号を振ってもよいかも知れないです・・・けど他人に嫌がられるのでなるべくやめましょ~)

投稿日時 - 2012-06-18 09:53:20

補足

ご回答ありがとうございます。

InputとOutputでFreeFileの変数を変えた方がいいのですね。
勉強になりました。

読み込んだファイルをAccess内のテーブルに反映させる場合は
どうすれば良いでしょうか?

Access内でインポート定義を行い、DoCmd.TransferTextを
使うという事は分かったのですがインポートエラーが出てしまい
うまくインポートする事ができません。。。

投稿日時 - 2012-06-19 00:03:54

あなたにオススメの質問