【Excel VBA】シートの削除する方法(ミスしにくいTipsあり)

Excel VBAを利用していると以下の記事のように追加したシートを削除したいときがあります。

シートを削除する方法

シートを削除するにはWorksheetオブジェクトのDeleteメソッドを使います。使い方はいたって簡単です。

Sub Sample1()
    ActiveSheet.Delete
End Sub

ただし、このDeleteメソッドは普通に使うと、以下のように本当に削除していいかを聞いてきます。

これはVBAで自動で削除するのには非常に邪魔になります。なので、このような警告を出さないようにするために以下のようにDeleteメソッドを実行する前にApplicationオブジェクトのDisplayAlertsプロパティにFalseを設定します。

DisplayAlertsプロパティをFalseに設定すると警告がすべてでなくなります。そうすると予期しない警告も出なくなり、警告に気が付けず、VBAで開発するのに効率が悪くなってしまいます。
DisplayAlertsプロパティをFalseにする箇所は最低限にしましょう。

Sub Sample2()
    Application.DisplayAlerts = False '警告を表示しないに設定する
    
    ' 警告を無視したい処理を記載。ここに書く処理は最低限にした方がVBA開発効率がよい。
    
    Application.DisplayAlerts = True ' 警告を表示するに設定する
End Sub

シート削除でよく使う方法は以下の3種類です。

  • アクティブなシートを削除
  • 指定したシートを削除
  • 複数のシートをまとめて削除

アクティブなシートを削除

アクティブなシートを削除するコードは以下のとおりです。ただし、わたしがおすすめするのはシートをちゃんと指定して削除する「指定したシートを削除」の方法です。

Sub Sample3()
    Application.DisplayAlerts = False ' 警告を表示しないに設定する
    
    ActiveSheet.Delete ' アクティブなシートを削除する
    
    Application.DisplayAlerts = True ' 警告を表示するに設定する
End Sub

指定したシートを削除

ここでは指定したシートを削除する方法を説明します。シートの指定の仕方に以下の2種類あります。

  • シートのインデックスを指定する方法
  • シート名を指定する方法

それぞれについて説明します。

シートのインデックスを指定してシートを削除

シートのインデックスを指定して削除する方法は基本的な形は以下です。

Worksheets(インデックス).Delete

インデックスは数値になります。インデックスは左から数えて何番目のシートかで表現されます。一番左のシートは「1」、左から2番目のシートは「2」といった具合です。

実際の例が以下になります。

Sub Sample4()
    Application.DisplayAlerts = False ' 警告を表示しないに設定する
    
    ThisWorkbook.Worksheets(1).Delete ' VBAを実行しているブックのインデックス1のシートを削除する
    
    Application.DisplayAlerts = True ' 警告を表示するに設定する
End Sub

上記の例のVBAは実行しているブック左から1番目のシートを指定しています。アクティブなブックを指定せずに、VBAを実行しているブックを指定しているのは、だいたいVBAを実行しているブックに対して操作がほとんどであることと、そちらの方が処理が確実だからです。アクティブなブックはVBA実行中に他の作業でExcelを触っているとアクティブなブックが意図せず変わってしまうことがあるためです。

シートの名前を指定してシートを削除

シートの名前を指定して削除する方法は基本的な形は以下です。

Worksheets("シートの名前").Delete

実際の例が以下になります。

Sub Sample5()
    Application.DisplayAlerts = False ' 警告を表示しないに設定する
    
    ThisWorkbook.Worksheets("Sheet2").Delete ' VBAを実行しているブックのシート名が「Sheet2」のシートを削除する
    
    Application.DisplayAlerts = True ' 警告を表示するに設定する
End Sub

指定したシートが存在しない場合の振る舞い

指定したシートが存在しない場合は以下のようになります。

複数のシートを削除

複数の指定をする場合は以下のようにArrayメソッドで複数のシートを指定します。

Worksheets(Array(インデックス1, インデックス2)).Delete
Worksheets(Array("シートの名前1", "シートの名前2")).Delete

シートのインデックスを指定して複数のシートを削除する場合は以下のようになります。

Sub Sample6()

    Application.DisplayAlerts = False ' 警告を表示しないに設定する
    
    ThisWorkbook.Worksheets(Array(1, 2)).Delete ' VBAを実行しているブックのインデックスが1と2のシートを削除する
    
    Application.DisplayAlerts = True ' 警告を表示するに設定する

End Sub

シートの名前を指定して複数のシートを削除する場合は以下のようになります。

Sub Sample7()

    Application.DisplayAlerts = False ' 警告を表示しないに設定する
    
    ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2")).Delete ' VBAを実行しているブックのシート名が「Sheet1」と「Sheet2」のシートを削除する
    
    Application.DisplayAlerts = True ' 警告を表示するに設定する

End Sub

コメント

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