【VBA】複数のCSVファイルを1つのCSVファイルに纏める【結合】

VBAで
 ・複数のCSVファイルを
 ・1つのCSVファイルに纏める方法
を紹介します!
※複数のCSVファイルを結合する方法です。

各CSVファイルに見出し行があっても、
上手いこと1つのCSVファイルに纏める方法です!

なお
 ・複数のCSVファイルを
 ・1つのシートに纏める方法
は、以下の記事をご確認ください。


PR

VBAコード

ここでは例として、
 ・デスクトップ配下のフォルダ「test」配下にある
 ・全てのCSVファイルを
 ・1つのCSVファイルに纏める方法
を紹介します。

フォルダ「test」配下のCSVファイル(3つ)
フォルダ「test」配下のCSVファイル(3つ)
001.csv
001.csv
002.csv
002.csv
003.csv
003.csv

上記の全てのCSVファイルには「見出し行」があります。

Option Explicit

Sub sample()
    
    Dim targetFolder As String
    Dim outputFile As String
    Dim fileCount As Long
    Dim fso As Object
    Dim file As Object
    Dim tsoOutput As Object
    Dim tsoInput As Object
    
    '対象フォルダを指定
    targetFolder = "C:\Users\user\Desktop\test"
    '出力ファイルを指定
    outputFile = "C:\Users\user\Desktop\merge.csv"
    
    '処理したファイル数を示すのカウンタ変数
    fileCount = 0
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
   '出力ファイルが存在したら削除(読み取り専用でも削除)
    If fso.FileExists(outputFile) Then
        fso.deleteFile outputFile, True
    End If
    
    '出力ファイルを作成
    Set tsoOutput = fso.CreateTextFile(fileName:=outputFile)
    
    '対象フォルダ配下のファイル数分繰り返し
    For Each file In fso.getFolder(targetFolder).Files
        '対象ファイル(拡張子)の場合のみ処理を行う
        If LCase(fso.GetExtensionName(file.name)) = "csv" Then
            'カウンタ変数をカウントアップ
            fileCount = fileCount + 1
            '対象ファイルを開く
            Set tsoInput = fso.OpenTextFile(file.Path)
            '1ファイル目でない場合は1行目(見出し行)をスキップする
            If fileCount <> 1 Then
                tsoInput.SkipLine
            End If
            '対象ファイルを出力ファイルへ出力する
            tsoOutput.Write tsoInput.ReadAll
        End If
    Next
    
    MsgBox ("複数のファイルを1つ纏めました。対象ファイル数:" & fileCount)
    
    '後片付け
    tsoOutput.Close
    tsoInput.Close
    Set fso = Nothing
    
End Sub

以下を指定します。
※状況に応じて任意の値を指定してください。

・対象フォルダ(14行目)
・出力ファイルのパス(17行目)

既に「出力ファイル」が存在したら削除します(24~26行目)。

「FileSystemObject」の「CreateTextFile」メソッドにより、「TextStreamオブジェクト」を取得し、変数「tsoOutput」へ設定します(29行目)。
出力ファイルを表します。

「FileSystemObject」の「getFolder」メソッドにより、「Folderオブジェクト」を取得します(32行目)。

「Folderオブジェクト」の「Files」プロパティにより、「指定したフォルダに含まれるすべての Fileオブジェクト」を取得します(32行目)。

「FileSystemObject」の「OpenTextFile」メソッドにより、「TextStreamオブジェクト」を取得し、変数「tsoInput」へ設定します(38行目)。
入力ファイルを表します。

1ファイル目でない場合、「TextStreamオブジェクト」の「SkipLine」メソッドにより、1行目(見出し行)をスキップします(40~42行目)。
※1ファイル目の場合は、(見出し行を含め)まるっと出力させるためスキップさせません。

「TextStreamオブジェクト」の「ReadAll」メソッドと「Write」メソッドにより、対象ファイルの内容を出力ファイルへ出力します(44行目)。

PR

実行結果

複数のCSVファイルを1つのCSVファイルに纏めることができました。
見出し行も上手いことできました。

実行結果①
実行結果①
実行結果②
実行結果②
実行結果③
実行結果③
PR

参考①

作成したCSVファイルをシートへ読み込むこともできます。
※読み込み方法は4種類あります。

詳細は以下の記事をご確認ください。

PR

参考②

バッチファイルでも複数のCSVファイルを1つのCSVファイルに纏めることができます。

詳細は以下の記事をご確認ください。

PR

参考③

PowerShellでも複数のCSVファイルを1つのCSVファイルに纏めることができます。

詳細は以下の記事をご確認ください。

PR

参考④

上記で使用した以下の詳細は、公式サイトをご確認ください。

●「FileSystemObject」の「CreateTextFile」メソッド


●「FileSystemObject」の「getFolder」メソッド


●「Folderオブジェクト」の「Files」プロパティ


●「FileSystemObject」の「OpenTextFile」メソッド


●「TextStreamオブジェクト」の「SkipLine」メソッド


●「TextStreamオブジェクト」の「ReadAll」メソッド


●「TextStreamオブジェクト」の「Write」メソッド