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

Excel VBA VBA
スポンサーリンク

CSV統合のさらに応用版テンプレート

今回は 「統合時に日付やタイムスタンプを列に追加する版」「特定の列だけ抽出して統合する版」 を紹介します。


1. 統合時に日付やタイムスタンプを列に追加する版

CSVを統合するときに、処理日時(タイムスタンプ) を列として追加しておくと、後から「いつ統合したデータか」を追跡できます。

Sub MergeCSV_AddTimestamp()
    Dim folderPath As String, fileName As String
    Dim wsMaster As Worksheet
    Dim pasteRow As Long, lastRow As Long
    Dim ts As String
    
    folderPath = "C:\Data\CSV\"   ' ←環境に合わせて変更
    Set wsMaster = ThisWorkbook.Sheets("Master")
    wsMaster.Cells.Clear
    pasteRow = 1
    
    ts = Format(Now, "yyyy-mm-dd HH:NN:SS")  ' 現在日時
    
    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
        
        ' データコピー
        wsCSV.Range("A1:A" & lastRow).EntireRow.Copy wsMaster.Cells(pasteRow, 1)
        
        ' タイムスタンプ列を追加
        Dim copiedRows As Long
        copiedRows = lastRow
        wsMaster.Range(wsMaster.Cells(pasteRow, wsMaster.Cells(pasteRow, 1).End(xlToRight).Column + 1), _
                       wsMaster.Cells(pasteRow + copiedRows - 1, wsMaster.Cells(pasteRow, 1).End(xlToRight).Column + 1)).Value = ts
        
        pasteRow = wsMaster.Cells(wsMaster.Rows.Count, 1).End(xlUp).Row + 1
        
        wbCSV.Close SaveChanges:=False
        fileName = Dir
    Loop
    
    MsgBox "CSV統合完了!(タイムスタンプ列付き)"
End Sub
VB

2. 特定の列だけ抽出して統合する版

CSVの中から 必要な列だけ抽出 して統合する例です。例えば「A列(ID)とC列(値)」だけを統合する場合。

Sub MergeCSV_SelectedColumns()
    Dim folderPath As String, fileName As String
    Dim wsMaster As Worksheet
    Dim pasteRow As Long, lastRow As Long
    
    folderPath = "C:\Data\CSV\"   ' ←環境に合わせて変更
    Set wsMaster = ThisWorkbook.Sheets("Master")
    wsMaster.Cells.Clear
    pasteRow = 1
    
    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
        
        ' 特定列(例: A列とC列)だけコピー
        wsMaster.Range("A" & pasteRow & ":A" & pasteRow + lastRow - 1).Value = wsCSV.Range("A1:A" & lastRow).Value
        wsMaster.Range("B" & pasteRow & ":B" & pasteRow + lastRow - 1).Value = wsCSV.Range("C1:C" & lastRow).Value
        
        pasteRow = wsMaster.Cells(wsMaster.Rows.Count, 1).End(xlUp).Row + 1
        
        wbCSV.Close SaveChanges:=False
        fileName = Dir
    Loop
    
    MsgBox "CSV統合完了!(特定列のみ抽出)"
End Sub
VB

✅ まとめ

  • タイムスタンプ列追加版 → 統合日時を記録できるので、データの鮮度管理に便利。
  • 特定列抽出版 → 必要な列だけを統合できるので、不要データを省いて効率化。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました