Excel VBAを使って、シート(sheet)を削除することは結構あると思います。今回はVBAでシートを削除する方法について紹介したいと思います。
シート名を指定して削除
まずは、シート名を指定して削除する場合です。例としてtest1,test2,test3というシートが存在してtest3シートのみを削除したい場合で考えます。
Public Sub sheet_delete()
Worksheets("test3").Delete
End Sub
基本的には以下のように指定するとシートを削除することができます。
Worksheets("test3").Delete
ただし、この状態で実行すると以下のような確認ダイアログが表示されてしまいます。
確認ダイアログを表示させずに、シートを削除するには、一時的にApplication.DisplayAlertsを
一時的にFalseにしてダイアログが表示されないようにします。
Public Sub sheet_delete()
Application.DisplayAlerts = False
Worksheets("test3").Delete
Application.DisplayAlerts = True
End Sub
削除をした後は、元に戻すことを忘れないようにしましょう。
- ダイアログを表示させずに削除する場合はApplication.DisplayAlerts = False
- シート削除が終わったらApplication.DisplayAlerts = Trueで元に戻す
一部のシート名以外をまとめて削除
一部のシートを除き、それ以外のシートをまとめて削除したい場合は、worksheetsをFor Eachで回しながら削除します。今回はtest1~test5シートまでが存在する状態でtest2以外のシートをすべて削除する場合を例にします。
Sub Sheets_delete()
Dim targetSheet As Worksheet
Application.DisplayAlerts = False
'test2シート以外は削除する
For Each targetSheet In Worksheets
If targetSheet.Name <> "test2" Then
targetSheet.Delete
End If
Next
Application.DisplayAlerts = False
End Sub
- 各シートを一括操作するときはWorksheetsをFor Eachで回す
除外したいシートが複数ある場合
削除したくないシートが複数ある場合は、Case文を使って書くこともできます。
Sub Sheets_delete()
Dim targetSheet As Worksheet
Application.DisplayAlerts = False
'test1と2シート以外は削除する
For Each targetSheet In Worksheets
Select Case targetSheet.Name
'何もしない
Case "test1", "test2"
'シート削除
Case Else
targetSheet.Delete
End Select
Next
Application.DisplayAlerts = False
End Sub
複数のシートの操作をVBAで処理するときは、かなりの頻度でFor EachやFor Nextを使います。
個人的にはFor Eachで書ける場合は、For Eachを使ったほうがコードが簡潔なので使いやすいと思います。
コメント