Vba: 名前に特定のテキストが含まれている場合はシートを削除します
VBA で次の構文を使用すると、特定のテキストを含む Excel ブック内の各シートを削除できます。
SubDeleteSheets ()
Dim TextToFind As String
Dim TextWildcard As String
Dim Ws As Worksheet
Dim i As Integer
'prompt user for text to search for in sheet names
TextToFind = Application.InputBox(" Delete Sheets That Contain: ", _
ThisWorkbook.ActiveSheet.Name, , , , , 2)
TextWildcard = " * " & TextToFind & " * "
Application.DisplayAlerts = False
'loop through sheets and delete each sheet that contains text
i = 0
For Each Ws In ThisWorkbook.Sheets
If Ws.Name Like TextWildcard Then
Ws.Delete
i = i + 1
End If
Next Ws
Application.DisplayAlerts = True
End Sub
この特定のマクロを実行すると、特定のテキスト文字列を入力できる入力ボックスが表示されます。
Enter キーを押すと、その特定のテキストを含む Excel ワークブック内の各シートが自動的に削除されます。
注: Application.DisplayAlerts=False行は、シートの削除プロセスを表示しないように VBA に指示します。これにより、実行が高速化されます。
次の例は、この構文を実際に使用する方法を示しています。
例: VBA を使用して特定のテキストを含むシートを削除する
次の 4 つのシートを含む Excel ワークブックがあるとします。
ここで、シート名に「Team」を含むすべてのシートを削除するとします。
これを行うには、次のマクロを作成できます。
SubDeleteSheets ()
Dim TextToFind As String
Dim TextWildcard As String
Dim Ws As Worksheet
Dim i As Integer
'prompt user for text to search for in sheet names
TextToFind = Application.InputBox(" Delete Sheets That Contain: ", _
ThisWorkbook.ActiveSheet.Name, , , , , 2)
TextWildcard = " * " & TextToFind & " * "
Application.DisplayAlerts = False
'loop through sheets and delete each sheet that contains text
i = 0
For Each Ws In ThisWorkbook.Sheets
If Ws.Name Like TextWildcard Then
Ws.Delete
i = i + 1
End If
Next Ws
Application.DisplayAlerts = True
End Sub
このマクロを実行すると、シート名で検索するテキストを入力できる入力ボックスが表示されます。
「Team」と入力してOKを押すと、名前のどこかに「Team」が含まれるシート名が自動的に削除されます。
シート名に「Team」が含まれる 2 つのシートが削除されていることに注意してください。
「チーム」が含まれていないシートはそのまま残されました。
追加リソース
次のチュートリアルでは、VBA で他の一般的なタスクを実行する方法について説明します。
VBA: ワークブック内のシート数を数える方法
VBA: 別のブックからデータを抽出する方法
VBA: 複数行を挿入する方法