CSVファイルを複数結合したいならこれをすればOK
そんなコードを紹介していこう。何十メガあっても一瞬で結合させる。
注意として、CSVが同じ列あることが前提だ。
CSVを結合する前の準備
- VBAのエディタ内、上のツールから参照設定をひらく
- Microsoft Scripting Runtimeにチェックを入れる
これで準備はOK。まずはCSVファイルを配列として出力することから始めていこう。
Step1: CSVファイル一覧を配列として出力
Function getfileLists(ByVal folder_path As String) As Variant Dim target_file As String Dim files As String target_file = Dir(folder_path & "*.csv") Do While target_file <> "" files = files + target_file & "," target_file = Dir() Loop files = Left(files, Len(files) - 1) getfileLists = Split(files, ",") End Function
- 指定フォルダからCSVを読み込む
- CSVファイル名をカンマ付きですべてつなげる
- Splitで配列として出力する
上記関数を使うと、指定フォルダパス内のCSVファイルが配列として出力される。
この関数をベースに次のコードを作成していく。
Step2: すべてのCSVファイルを結合する
Sub csvFilesMerge(ByVal target_folder As String, ByVal output_folder As String) Dim file_system As New FileSystemObject Dim text_stream As TextStream Dim text_stream_output As TextStream Dim results As String Dim i As Long Dim file_lists As Variant file_lists = getfileLists(target_folder) For i = LBound(file_lists) To UBound(file_lists) Set text_stream = file_system.OpenTextFile(target_folder & file_lists(i)) If i = 0 Then ' CSVデータ(ヘッダー含め)を出力 Set text_stream_output = file_system.OpenTextFile( _ output_folder & "output.csv", ForWriting, True _ ) results = text_stream.ReadAll text_stream_output.Write results Else ' CSVデータ(一行目をスキップ)を追記 Set text_stream_output = file_system.OpenTextFile( _ output_folder & "output.csv", ForAppending, True _ ) text_stream.SkipLine results = text_stream.ReadAll text_stream_output.Write results End If text_stream.Close text_stream_output.Close Next i End Sub
- CSVファイル名リストを取得する
- 最初のCSVならヘッダー含めすべてoutput.csvに出力する
- 2つ目以降のCSVなら1行目をスキップしてoutput.csvに追記する
簡単に説明すると上記のような感じ。コピペすればすべての準備は完了だ。
あとはざっくり使いかたを説明する。
csvFilesMergeの使いかた
Sub allDataMerge() Dim target_folder As String Dim output_folder As String target_folder = "C:\Users\[username]\Desktop\test\" output_folder = "C:\Users\[username]\Desktop\" Call csvFilesMerge(target_folder, output_folder) End Sub
- target_folder...結合したいCSVがあるフォルダパス
- output_folder...結合したCSVを格納したいフォルダパス
使いかたは簡単。上記コードをコピペして「target_folder」「output_folder」を変えるだけでOK。
output.csvが出力されることを確認できたら成功だ。
まとめ: これで簡単にCSVを結合しよう
今回紹介したコードを使えば、たとえ何十メガあっても一瞬で結合する。
これはわざわざ1行づつ読み込みしてないから。
VBAでやるならこの方法を使って簡単に、最速でCSVを結合してみよう。
関連fa-arrow-circle-right【VBA】業務効率化に便利なツール【まとめ】