ExcelVBAではWorksheet.Deleteを使い、シートを削除できます。この記事ではExcelのシートを削除する方法について
- シートの削除とは
- アクティブなシートを削除する方法
- 警告のアラートメッセージを出さずに削除する
- シートを指定して削除する方法
- アクティブでないシートすべてを一括で削除
など基本的な内容から応用的な使い方についても解説していきます。これらのシートの削除は、特に一時的な作業用のシートを一括で削除する場合に重宝します。Excelのシートを削除する方法について、是非この記事を参考にしてください。
シートの削除とは
Excelでのシートの削除は、次の画像のように「シート名のタブを右クリック→削除」とします。
削除後の画像ではSheet2が削除されていることが確認できます。ExcelVBAでシートを削除するためには次のようにWorksheetクラスのDeleteメソッドを使います。
Worksheetクラスのオブジェクト.Delete
それでは、次の章から例を交えながら詳しく解説していきます。
アクティブなシートを削除する方法
アクティブなシートを削除するには、ActiveSheet.Deleteを使います。アクティブなシートを削除する方法を次のサンプルコードで確認してみましょう。
Sub Sample() ActiveSheet.Delete End Sub
サンプルコードを実行すると実行時の画像にあるような警告ウィンドウが表示されます。警告ウィンドウの削除ボタンをクリックすると、アクティブなシートが削除されます。実行後の画像から、アクティブなシートが削除されていることが確認できます。
警告のアラートメッセージを出さずに削除する
警告が表示されるとシートの削除が一時停止され、手動での操作が必要になります。この挙動は、自動でシートを削除する際に邪魔になってしまいます。そこで、警告を出さずに処理を行うためにApplication.DisplayAlertsを使います。
Application.DisplayAlertsを使うには、次のように記述します。
Application.DisplayAlerts = False 警告を出さずに行う処理 Application.DisplayAlerts = True
- Application.DisplayAlerts = False
- Application.DisplayAlerts = True
警告を出さないようにしています。
警告を出すように戻しています。
Application.DisplayAlertsがFalseである間は、一切の警告が出ないようになります。警告が必要な処理に影響を与えないようにするために、警告が不要な処理が終わったら警告を出すように戻しましょう。
それでは、次のサンプルコードで警告を出さずにシート削除する方法を確認してみましょう。
Sub Sample() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub
このサンプルコードでは警告を出さずにシートを削除しています。そのため、実行前の画像から実行後の画像へとすぐに切り替わります。実行後の画像から、アクティブなシートが削除されていることも確認できます。
シートを指定して削除する方法
シートを指定して削除する方法には次の2通りの方法があります。
インデックス番号を指定して削除する方法
インデックス番号を指定してシートを削除するためには、次のように記述します。
Worksheets(インデックス番号).Delete
インデックス番号で指定したシートを削除する方法について、次のサンプルコードを確認してみましょう。
Sub Sample() Application.DisplayAlerts = False Worksheets(1).Delete Application.DisplayAlerts = True End Sub
このサンプルコードでは1番目のシートを削除するためにWorksheets(1).Deleteと記述しています。実行後には1番目のシートが削除されていることが確認できます。
シート名を指定して削除する方法
シート名を指定してシートを削除するためには、次のように記述します。
Worksheets("シート名").Delete
シート名で指定したシートを削除する方法について、次のサンプルコードを確認してみましょう。
Sub Sample() Application.DisplayAlerts = False Worksheets("Sheet1").Delete Application.DisplayAlerts = True End Sub
このサンプルコードではSheet1を削除するためにWorksheets(“Sheet1”).Deleteと記述しています。実行後にはSheet1が削除されていることが確認できます。
複数のシートをまとめて削除
複数のシートをまとめて削除したい場合には、Array関数を使って複数のシートを指定する方法が便利です。Array関数の引数にはインデックス番号、もしくはシート名を指定します。
Sub Sample() Application.DisplayAlerts = False Worksheets(Array("Sheet1", "Sheet3")).Delete Application.DisplayAlerts = True End Sub
このサンプルコードでは、Array関数を使って複数のシート名を指定し、まとめてシートを削除しています。
アクティブでないシートすべてを一括で削除
アクティブでないシートすべてを一括で削除するためにFor Eachステートメントを使い、次のようにします。
Sub Sample() ActiveSheet.Move Worksheets(1) Application.DisplayAlerts = False For Each mySheet In Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Delete End If Next mySheet Application.DisplayAlerts = True End Sub
このサンプルコードでは、アクティブなシートを削除しないようにするためにActiveSheet.Move Worksheets(1)で先頭に移動しています。その後、For Eachステートメントでシート名がアクティブシートの名前と一致しない場合に削除しています。
これにより、結果としてアクティブでないシートを一括で削除できます。For Eachステートメントの使い方については、こちらで詳しく解説しています。ぜひ参考にしてください。
まとめ
いかがでしたか?今回はExcelVBAでシートを削除する方法について解説しました。とくにシートを一括で削除する方法は、しばしば作業の効率化に繋がります。
もし、ExcelVBAでシートを削除する機会があれば、この記事を思い出してみてください!