Excel VBA | フォルダ内の全 CSV を 1 枚の Excel に統合するテンプレート

Excel VBA VBA
スポンサーリンク

今回は 「列名リストをConfigシートから読み込む版」「統合結果を自動で別ブックに保存する版」 を紹介します。


1. 列名リストをConfigシートから読み込む版

Configシートに「抽出したい列名」を並べておき、それを読み込んで統合処理に使う汎用版です。
※ 各CSVの1行目をヘッダ行として扱い、列名を検索してコピーします。

Sub MergeCSV_ConfigColumns()
    Dim folderPath As String, fileName As String
    Dim wsMaster As Worksheet, wsConfig As Worksheet
    Dim pasteRow As Long, lastRow As Long
    Dim targetCols() As String
    Dim i As Long, colCount As Long
    
    folderPath = "C:\Data\CSV\"   ' ←環境に合わせて変更
    Set wsMaster = ThisWorkbook.Sheets("Master")
    Set wsConfig = ThisWorkbook.Sheets("Config")
    wsMaster.Cells.Clear
    pasteRow = 1
    
    ' ConfigシートのA列に列名リストがあると仮定
    colCount = wsConfig.Cells(wsConfig.Rows.Count, "A").End(xlUp).Row
    ReDim targetCols(1 To colCount)
    For i = 1 To colCount
        targetCols(i) = wsConfig.Cells(i, "A").Value
    Next i
    
    fileName = Dir(folderPath & "*.csv")
    Do While fileName <> ""
        Dim wbCSV As Workbook, wsCSV As Worksheet
        Set wbCSV = Workbooks.Open(folderPath & fileName)
        Set wsCSV = wbCSV.Sheets(1)
        
        lastRow = wsCSV.Cells(wsCSV.Rows.Count, 1).End(xlUp).Row
        
        ' ヘッダ行から列位置を検索
        Dim colIndex() As Long
        ReDim colIndex(1 To colCount)
        For i = 1 To colCount
            colIndex(i) = Application.Match(targetCols(i), wsCSV.Rows(1), 0)
        Next i
        
        ' ヘッダ行をコピー(最初のファイルのみ)
        If pasteRow = 1 Then
            For i = 1 To colCount
                wsMaster.Cells(1, i).Value = targetCols(i)
            Next i
            pasteRow = 2
        End If
        
        ' データ行をコピー
        Dim r As Long
        For r = 2 To lastRow
            For i = 1 To colCount
                wsMaster.Cells(pasteRow, i).Value = wsCSV.Cells(r, colIndex(i)).Value
            Next i
            pasteRow = pasteRow + 1
        Next r
        
        wbCSV.Close SaveChanges:=False
        fileName = Dir
    Loop
    
    MsgBox "CSV統合完了!(Configシートの列名リスト使用)"
End Sub
VB

2. 統合結果を自動で別ブックに保存する版

統合した結果を「Master」シートにまとめた後、新しいExcelブックに保存する例です。

Sub SaveMergedCSVtoNewWorkbook()
    Dim wsMaster As Worksheet
    Dim newWb As Workbook
    Dim savePath As String
    
    Set wsMaster = ThisWorkbook.Sheets("Master")
    
    ' 新しいブックを作成
    Set newWb = Workbooks.Add
    wsMaster.UsedRange.Copy newWb.Sheets(1).Cells(1, 1)
    
    ' 保存先パス(例: デスクトップ)
    savePath = Environ("USERPROFILE") & "\Desktop\MergedResult.xlsx"
    
    ' 保存
    Application.DisplayAlerts = False
    newWb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
    
    newWb.Close SaveChanges:=False
    
    MsgBox "統合結果を新しいブックに保存しました: " & savePath
End Sub
VB

✅ まとめ

  • Configシート版 → 列名リストを外部管理できるので、柔軟に列選択可能。
  • 別ブック保存版 → 統合結果を自動で新しいファイルに保存できるので、配布やバックアップに便利。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました