複数のcsvファイルをマクロ(VBA)で取り込みたい
csvファイルの中身が、
20090507
120508
osaka
項目1,項目2,項目3,・・・・・,項目10
a1,a2,a3,・・・・・,a10
b1,b2,b3,・・・・・,b10
c1,c2,c3,・・・・・,c10
や
20090507
132529
hokkaido
項目1,項目2,項目3,・・・・・,項目10
d1,d2,d3,・・・・・,d10
e1,e2,e3,・・・・・,e10
f1,f2,f3,・・・・・,f10
となっているcsvファイルが特定のフォルダの中に100以上あります。
このcsvふぁいるの5行目だけをaccessに書き込んでテーブルに追加していきたいと思っています。
項目1,項目2,項目3,・・・・・,項目10
a1,a2,a3,・・・・・,a10
d1,d2,d3,・・・・・,d10
このようなテーブルができればいいのですが・・・
csvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する)→次のcsvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する)
この流れでいいと思うのですが方法が分かりません。
丸投げですがよろしくお願いします。
No.2ベストアンサー
- 回答日時:
(ちょっとメモリを使うかもしれませんが)
以下は、フォルダ「E:\tmp2」にあるファイル全てを処理する参考例となります。
ファイル内容を全部読込み、改行コードで配列にします(buf)
5行以上あったら、4行目をテーブルのフィールド名として使います。
項目1,項目2,項目3,項目4,項目5,項目6,項目7,項目8,項目9,項目10
5行目を文字にしてレコードを追加します。(フィールド全てがテキスト型と仮定)
a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
↓
'a1','a2','a3','a4','a5','a6','a7','a8','a9','a10'
(, カンマの前後に空白がないことが前提で)
処理の終わったファイルは、フォルダ「E:\tmp2\処理済み\」へ移動します。
Private Sub Sample1()
Dim oFso As Object
Dim oFile As Object
Dim buf As Variant
Set oFso = CreateObject("Scripting.FileSystemObject")
For Each oFile In oFso.GetFolder("E:\tmp2").Files
With oFso.OpenTextFile(oFile.Path)
buf = Split(.ReadAll, vbCrLf)
.Close
End With
If (UBound(buf) >= 4) Then
CurrentDb.Execute "INSERT INTO テーブル名 (" & buf(3) & _
") VALUES ('" & Replace(buf(4), ",", "','") & "');"
End If
oFso.MoveFile oFile.Path, "E:\tmp2\処理済み\"
Next
Set oFso = Nothing
End Sub
※ FileSystemObject の解説は以下が参考になります。
http://www.officetanaka.net/excel/vba/filesystem …
お礼が遅くなって申し訳ございません。ほとんど変更することなく望みどおりの結果ができました。1つずつ開いて閉じての繰り返ししかないと思っていたので目からうろこです。有難うございました。
No.3
- 回答日時:
#1です
>csvふぁいるの5行目だけを
という条件が有るのですね。もらしていたので
各インプトファイルで4レコードは書かず5レコード目を私の例ではshuyaku.csvに書き出し、
そこでインプット・ファイルをクローズすればよい。そして次のループを繰り返す。
>accessに書き込んでテーブルに追加していきたいと
出来た5行目のみの集約CSVファイルをアクセスにインポートすればよい。
>accessに書き込んでテーブルに追加していきたいと
ある時点で作業をやって、その後CSVファイルが増えて、増えたCSVの
第5行だけをテーブル追加と言うことを含んでいるとなると難しい。
追加のCSVファイルを見つける処理をどうするか。
早速の回答と補足有難うございます。
集約したCSVファイルからリンクテーブルを作って、後は追加クエリでいけそうです。書いてなかったですけど項目1が重複しないのでこれを主キーにしてできそうです。
有難うございました。
No.1
- 回答日時:
先ほども、そっくりの質問があった。
エクセルに取り込んで、CSVファイル単位で下の行に取り込んで行く方法はあるが、
ーー
テキストファイルを読んで、(A)
集約ファイルの後に追加s(Append)(B)
テキストファイル(A)をCLOSE
次のテキストファイルを読んで、
Bの末尾に追加
繰り返して最後のテキストファイルを読み
追加が終わると、集約テキストファイル(B)を書き出し。
(B)をClose
のやり方を勉強したら。
旧BASIC時代はこんなことばかりやっていたのだが、エクセルから入る世代には忘れられているようだな。
Googleで「APPENDモード」で照会のこと。
ーー
例コード
エクセルの標準モジュールで出来た。
簡単なCSVファイル3つでテスト済み。
Sub test03()
Dim fileNo1 As Integer: Dim fileNo2 As Integer
fileNo1 = FreeFile: fileNo2 = FreeFile
fn = Array("", "test01", "test02", "test03")
Open "shuyaku.csv" For Append As #fileNo2
For i = 1 To 3
fileNo1 = FreeFile
'MsgBox fileNo1 & fn(i)
Open fn(i) & ".csv" For Input As #fileNo1
While Not EOF(2)
Line Input #fileNo1, A
Print #fileNo2, A
Wend
Close #fileNo1
Next
Close #fileNo2
End Sub
ーー
集約ばかり説明したが、フォルダの中のファイルを捉えるコードは
VBSCRIPT
や
DIR関数を
Googleで照会のこと。
検索語は
VBSCRIPT ファイル および
DIR関数
WEBにコードがいくつも有るはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
複数のcsvファイルをExcelに一...
-
CSV形式での保存時に”文字列...
-
csvファイルでの日付設定「yyyy...
-
ADODBでSQL実行前にレコードセ...
-
複数のCSVファイルのAccessテー...
-
データ解析ソフトRでのファイル...
-
【C#】パス名で無効な文字
-
csvファイルを列数ごとに分割す...
-
【ExcelVBA】UTF-8の文字コード...
-
COBOL85でのCSVファ...
-
VBAでcsvファイルを読み込んで...
-
csvファイル 項目数取得
-
CSVファイル作成
-
エクセルVBA 大容量CSVファイル...
-
vb2010でCSVファイルを並び替え...
-
ファイル名ないにあるカンマを...
-
エクセルで運転時間を見たい
-
マクロから出力されるcsvのダブ...
-
ファイルのアクセス回数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをExcelに一...
-
csvファイル 項目数取得
-
csvファイルでの日付設定「yyyy...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
エクセル形式のファイルの読み込み
-
csvファイルのデータの一部を取...
-
エクセルVBA 大容量CSVファイル...
-
CSVファイル作成
-
EXCEL|csvで保存→開くcsvを閉じる
-
CSVファイルの項目行を削除...
-
巨大なCSVの加工(指定列のみの...
-
データ解析ソフトRでのファイル...
-
VBAでCSVファイルのデータを集...
-
【ExcelVBA】UTF-8の文字コード...
-
【C#】パス名で無効な文字
-
特定文字を入ってるCSVの特定の...
おすすめ情報