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

Excel VBA VBA
スポンサーリンク

複数の CSV ファイルを 1 つの Excel ワークブックにまとめたいときの VBA マクロ設計例 を紹介します。これを使えば「フォルダ内の全 CSV を順番に読み込み → 1 枚のシートに統合」できます。


処理の流れ

  1. 対象フォルダを指定
    Dir 関数で CSV ファイルを順番に取得。
  2. CSV を開いて読み込み
    Workbooks.Open で開き、内容をコピー。
  3. 統合シートに貼り付け
    → 1 枚のシートに順次追加。ファイル名や区切り行を入れると便利。
  4. 閉じる
    → 読み込んだ CSV は閉じる。

VBA コード例

Sub MergeCSVtoExcel()
    Dim folderPath As String
    Dim fileName As String
    Dim wsMaster As Worksheet
    Dim lastRow As Long, pasteRow As Long
    
    ' 統合先シートを準備
    Set wsMaster = ThisWorkbook.Sheets("Master")
    wsMaster.Cells.Clear
    pasteRow = 1
    
    ' フォルダパスを指定(例: C:\Data\CSV)
    folderPath = "C:\Data\CSV\"
    
    ' 最初の CSV ファイルを取得
    fileName = Dir(folderPath & "*.csv")
    
    Do While fileName <> ""
        Dim wbCSV As Workbook
        Dim wsCSV As Worksheet
        
        ' CSV を開く
        Set wbCSV = Workbooks.Open(folderPath & fileName)
        Set wsCSV = wbCSV.Sheets(1)
        
        ' CSV の最終行を取得
        lastRow = wsCSV.Cells(wsCSV.Rows.Count, 1).End(xlUp).Row
        
        ' ファイル名を見出しとして挿入
        wsMaster.Cells(pasteRow, 1).Value = "File: " & fileName
        pasteRow = pasteRow + 1
        
        ' データをコピー
        wsCSV.Range("A1:A" & lastRow).EntireRow.Copy _
            wsMaster.Cells(pasteRow, 1)
        
        ' 次の貼り付け位置を更新
        pasteRow = wsMaster.Cells(wsMaster.Rows.Count, 1).End(xlUp).Row + 2
        
        ' CSV を閉じる
        wbCSV.Close SaveChanges:=False
        
        ' 次のファイルへ
        fileName = Dir
    Loop
    
    MsgBox "CSV統合完了!", vbInformation
End Sub
VB

ポイント

  • フォルダパスは環境に合わせて変更してください。
  • 見出し行の扱い
    • 各 CSV にヘッダがある場合、最初のファイルだけコピーし、以降はヘッダを除外すると良い。
  • ファイル名を残す
    • 統合後に「どのデータがどのファイル由来か」分かるように、ファイル名を挿入しておくと便利。
  • 大量データ対応
    • 数万行規模なら Copy より Value 代入の方が高速。

✅ 応用アイデア

  • シート分割版: 各 CSV を別シートに展開。
  • 自動化: Windows タスクスケジューラで Excel を起動し、毎日自動統合。
  • ログ出力: 統合したファイル名一覧を別シートに記録。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました