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

Excel VBA VBA
スポンサーリンク

では「フォルダ内のCSV統合」の 応用版 を2種類紹介します。


1. ヘッダ行を1回だけコピーする版

複数CSVに同じヘッダがある場合、最初のファイルだけヘッダをコピーし、以降はデータ部分のみを統合します。

Sub MergeCSV_HeadersOnce()
    Dim folderPath As String, fileName As String
    Dim wsMaster As Worksheet
    Dim pasteRow As Long, lastRow As Long
    Dim isFirstFile As Boolean
    
    folderPath = "C:\Data\CSV\"   ' ←環境に合わせて変更
    Set wsMaster = ThisWorkbook.Sheets("Master")
    wsMaster.Cells.Clear
    pasteRow = 1
    isFirstFile = True
    
    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
        
        ' ヘッダ行は最初のファイルだけコピー
        If isFirstFile Then
            wsCSV.Rows(1).Copy wsMaster.Rows(pasteRow)
            pasteRow = pasteRow + 1
            isFirstFile = False
        End If
        
        ' データ部分(2行目以降)をコピー
        wsCSV.Range("A2:A" & lastRow).EntireRow.Copy wsMaster.Rows(pasteRow)
        pasteRow = wsMaster.Cells(wsMaster.Rows.Count, 1).End(xlUp).Row + 1
        
        wbCSV.Close SaveChanges:=False
        fileName = Dir
    Loop
    
    MsgBox "CSV統合完了!(ヘッダは1回だけコピー)"
End Sub
VB

2. 各CSVを別シートに展開する版

CSVごとに新しいシートを作成し、ファイル名をシート名にして展開します。

Sub ImportCSVtoSheets()
    Dim folderPath As String, fileName As String
    Dim wbCSV As Workbook, wsCSV As Worksheet
    Dim newSheet As Worksheet
    
    folderPath = "C:\Data\CSV\"   ' ←環境に合わせて変更
    
    fileName = Dir(folderPath & "*.csv")
    Do While fileName <> ""
        Set wbCSV = Workbooks.Open(folderPath & fileName)
        Set wsCSV = wbCSV.Sheets(1)
        
        ' 新しいシートを作成し、ファイル名をシート名に
        Set newSheet = ThisWorkbook.Sheets.Add
        newSheet.Name = Left(fileName, InStrRev(fileName, ".") - 1)
        
        ' データをコピー
        wsCSV.UsedRange.Copy newSheet.Cells(1, 1)
        
        wbCSV.Close SaveChanges:=False
        fileName = Dir
    Loop
    
    MsgBox "CSVを各シートに展開完了!"
End Sub
VB

✅ まとめ

  • ヘッダ行を1回だけコピー版 → 1枚のシートに全CSVを統合、ヘッダは最初だけ。
  • 各CSVを別シート展開版 → ファイルごとにシートを作成、シート名=ファイル名。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました