ここでは 複数ブックにまたがって条件付きで特定のシートだけ削除する VBAの例を紹介します。ポイントは「開いている複数のブックをループし、条件に合致するシートを ws.Delete で削除する」ことです。
⚠️ 注意:シート削除は元に戻せないため、必ずバックアップを取ってから実行してください。
基本例:シート名が「Temp」で始まるシートを削除
Sub 複数ブックで特定シート削除()
Dim wb As Workbook
Dim ws As Worksheet
Application.DisplayAlerts = False ' 削除確認ダイアログを非表示
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Worksheets
If Left(ws.Name, 4) = "Temp" Then
ws.Delete
End If
Next ws
End If
Next wb
Application.DisplayAlerts = True ' ダイアログを元に戻す
End Sub
VB👉 開いているすべてのブックで、シート名が「Temp」で始まるシートを削除します。
応用例1:セルの値で判定して削除
Sub セルの値でシート削除()
Dim wb As Workbook
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
' A1セルが「削除」と書かれていたら削除
If ws.Range("A1").Value = "削除" Then
ws.Delete
End If
Next ws
Next wb
Application.DisplayAlerts = True
End Sub
VB👉 各シートのA1セルに「削除」と書いてある場合のみ、そのシートを削除します。
応用例2:複数条件を組み合わせて削除
Sub 複数条件でシート削除()
Dim wb As Workbook
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
' 条件1: シート名が「Old」で始まる
' 条件2: B2セルの値が0以下
If Left(ws.Name, 3) = "Old" And ws.Range("B2").Value <= 0 Then
ws.Delete
End If
Next ws
Next wb
Application.DisplayAlerts = True
End Sub
VB👉 シート名が「Old」で始まり、かつB2セルの値が0以下なら、そのシートを削除します。
ポイント
- シート削除 →
ws.Delete - 確認ダイアログを抑制 →
Application.DisplayAlerts = False - 複数ブックをループ →
For Each wb In Application.Workbooks - 条件判定 → シート名やセルの値を使って柔軟に設定
練習課題
- 全ブックの「Sheet2」を削除するコードを書いてみる
- 各シートのC1セルが「Delete」と書かれていたら削除するコードを作る
- 複数条件を組み合わせて「シート名がTempで始まり、A1セルが空なら削除」にするコードを作る
こうした仕組みを作ると、複数ブックにまたがって条件付きで特定のシートを削除する自動化ツールが完成します。

