
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】業務効率化に便利なツール【まとめ】

