• ベストアンサー

複数のCSVファイルのAccessテーブルへの連続インポートについて

特定のフォルダにある形式は同じでファイル名の異なる複数のcsvファイルをAccessの特定のテーブルに自動で次々にインポートして1つのテーブルを作成したいのですが、今回の作業をするに当たりVBAに関するの本をはじめて読んだ程度の知識です。 本あるいはこの「教えて」を読んで、TransferTextを使い、Loop~Doでやればよいのかなと思うのですがうまくいきません。 すみませんが教えていただけたらうれしいです。Access2000を使っています。

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

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

CSVファイルはDOS時代からの、ステートメントコマンドで読めます。 いま事情でアクセスが使えないので、エクセルでテスト しました。参考になればと上げます。 アクセスにエクセルからインポートすることも出来ることですし。 複数あるCSVファイル名をどう指定するか キーインで聞くか、下記のように配列に定義するか 方法が決めかねていますが。 TransferTextなど使わず、GoTo文多用の拙いもので済みません。 途中のMsgboxは確認用ですから、本番では削除。 Arrayの中のファイル名は自分の場合のものを 入れる、My Documentsのフォルダ名も変える こと。 Line Input#文を使ったところがミソです。 Sub test01() i = 1 f = Array("csv1", "aaa", "a11") k = 0 p05: Open "c:\my documents\" & f(k) & ".csv" For Input As #1 p02: If EOF(1) Then GoTo p01 Line Input #1, a MsgBox a s = 1 j = 1 p03: p = InStr(s, a, ",") If p = 0 Then p = Len(a) + 1 Cells(i, j) = Mid(a, s, p - s) If p > Len(a) Then GoTo p04: s = p + 1 j = j + 1 GoTo p03 p04: i = i + 1 GoTo p02 p01: Close #1 k = k + 1 If k <= UBound(f) Then GoTo p05 End Sub

eee1487
質問者

補足

i = 1 f = Array("社員1", "aaa", "a11") k = 0 p05: Open "c:\mydata\" & f(k) & ".csv" For Input As #1 上記の形で実施しましたところ、「社員1.csv」のデータはインポートしましたが、次の2つ目の「社員2.csv」のファイルを読み込めませんでした。(エラーメッセージ”ファイルがみつかりません”)全くの素人のため力不足ですみません。 解決策を教えていただけたらうれしいです。

その他の回答 (2)

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

#1です。 f= Array("社員1", "aaa", "a11") と2番目の要素をそのままにしてはいけません。aaaは私の個人的な、偶々在ったファイルの名ですから。 f = Array("社員1", "社員2", "a11") と変え、また a11も貴殿の場合の3番目のファイル名を””で囲って置換えてください。あと4つ目以降も同じく、カンマで区切って付け加え、長くなるようなら、スペースとアンダーバーの「継続行の約束書式」を使い次行に続けます。 まあそれにしても限りがあります。数十以上の時は、私なら、エクセルのA列セルに名前を入れて読むとかします。 またあるフォルダの中のCSVファイル名を捕まえるプログラムもDIR関数で出来ます。過去の質問に例があるはずです。

eee1487
質問者

お礼

素人で初めての取り組みでしたが、ご指導のとおりDIR関数を使った過去の質問を参考に問題解決できました。素早い対応と親切さに感謝いたします。これを機会に次ぎの新たな挑戦をしたいと思います。本当にありがとうございました。

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

#1です。#1を上げて思い出しました。カンマで区切られた文字列を、区切りで取り出す方法にSplit関数が使えます。下記などを参考に使っていただけば、プログラムが判りやすく、短くなるでしょう。 Sub test02() a = "aa,sss,ddd,1" ' a = "1,23,sdf2,22" b = Split(a, ",") MsgBox b(0) MsgBox b(1) MsgBox b(2) MsgBox b(3) End Sub