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
コメント