VBAでsheet(シート)を削除する方法

スポンサーリンク

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で元に戻す

一部のシート名以外をまとめて削除

一部のシートを除き、それ以外のシートをまとめて削除したい場合は、worksheetsFor 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 EachFor Nextを使います。
個人的にはFor Eachで書ける場合は、For Eachを使ったほうがコードが簡潔なので使いやすいと思います。

コメント

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