Excel VBA | 複数ブックにまたがって条件付きで特定のシートを統合

Excel VBA VBA
スポンサーリンク

ここでは 複数ブックにまたがって条件付きで特定のシートを統合(まとめる) VBAの例を紹介します。ポイントは「複数のブックをループし、条件に合致するシートをコピーして1つの統合ブックにまとめる」ことです。

⚠️ 注意:統合処理は元に戻せないため、必ずバックアップを取ってから実行してください。


基本例:シート名が「Data」で始まるシートを統合

Sub 複数ブックでシート統合()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim destWb As Workbook
    
    ' 統合先ブックを指定(事前に開いておく)
    Set destWb = Workbooks("Master.xlsx")
    
    For Each wb In Application.Workbooks
        ' 統合先ブックとこのコードを含むブックは除外
        If wb.Name <> ThisWorkbook.Name And wb.Name <> destWb.Name Then
            For Each ws In wb.Worksheets
                ' 条件:シート名が「Data」で始まる
                If Left(ws.Name, 4) = "Data" Then
                    ' 統合先ブックの末尾にコピー
                    ws.Copy After:=destWb.Sheets(destWb.Sheets.Count)
                End If
            Next ws
        End If
    Next wb
End Sub
VB

👉 開いているすべてのブックから「Data」で始まるシートを「Master.xlsx」にまとめます。


応用例1:セルの値で判定して統合

Sub セルの値でシート統合()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim destWb As Workbook
    
    Set destWb = Workbooks("Master.xlsx")
    
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name And wb.Name <> destWb.Name Then
            For Each ws In wb.Worksheets
                ' A1セルが「統合」と書かれていたらコピー
                If ws.Range("A1").Value = "統合" Then
                    ws.Copy After:=destWb.Sheets(destWb.Sheets.Count)
                End If
            Next ws
        End If
    Next wb
End Sub
VB

👉 各シートのA1セルに「統合」と書いてある場合のみ、そのシートを統合ブックにコピーします。


応用例2:複数条件を組み合わせて統合

Sub 複数条件でシート統合()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim destWb As Workbook
    
    Set destWb = Workbooks("Master.xlsx")
    
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name And wb.Name <> destWb.Name Then
            For Each ws In wb.Worksheets
                ' 条件1: シート名が「Report」で始まる
                ' 条件2: B2セルの値が100以上
                If Left(ws.Name, 6) = "Report" And ws.Range("B2").Value >= 100 Then
                    ws.Copy After:=destWb.Sheets(destWb.Sheets.Count)
                End If
            Next ws
        End If
    Next wb
End Sub
VB

👉 シート名が「Report」で始まり、かつB2セルの値が100以上なら、そのシートを統合ブックにコピーします。


ポイント

  • シートコピーws.Copy After:=destWb.Sheets(destWb.Sheets.Count)
  • 統合先ブックを指定Set destWb = Workbooks("Master.xlsx")
  • 複数ブックをループFor Each wb In Application.Workbooks
  • 条件判定 → シート名やセルの値を使って柔軟に設定

練習課題

  1. 全ブックの「Sheet2」を統合ブックにまとめるコードを書いてみる
  2. 各シートのC1セルが「Merge」と書かれていたら統合するコードを作る
  3. 複数条件を組み合わせて「シート名がDataで始まり、A1セルが空でないなら統合」にするコードを作る

こうした仕組みを作ると、複数ブックにまたがって条件付きで特定のシートを統合する自動化ツールが完成します。

タイトルとURLをコピーしました