【VBA入門】Deleteでシートを削除(複数シートの削除も解説)

ExcelVBAではWorksheet.Deleteを使い、シートを削除できます。この記事ではExcelのシートを削除する方法について

  • シートの削除とは
  • アクティブなシートを削除する方法
  • 警告のアラートメッセージを出さずに削除する
  • シートを指定して削除する方法
  • アクティブでないシートすべてを一括で削除

など基本的な内容から応用的な使い方についても解説していきます。これらのシートの削除は、特に一時的な作業用のシートを一括で削除する場合に重宝します。Excelのシートを削除する方法について、是非この記事を参考にしてください。

目次

シートの削除とは

Excelでのシートの削除は、次の画像のように「シート名のタブを右クリック→削除」とします。

vba_delete_sheet11

画像:削除前

vba_delete_sheet12

画像:削除後

削除後の画像ではSheet2が削除されていることが確認できます。ExcelVBAでシートを削除するためには次のようにWorksheetクラスのDeleteメソッドを使います。

Worksheetクラスのオブジェクト.Delete

それでは、次の章から例を交えながら詳しく解説していきます。

アクティブなシートを削除する方法

アクティブなシートを削除するには、ActiveSheet.Deleteを使います。アクティブなシートを削除する方法を次のサンプルコードで確認してみましょう。

Sub Sample()
    ActiveSheet.Delete
End Sub

vba_delete_sheet21

画像:実行前

vba_delete_sheet22

画像:実行時

vba_delete_sheet23

画像:実行後

サンプルコードを実行すると実行時の画像にあるような警告ウィンドウが表示されます。警告ウィンドウの削除ボタンをクリックすると、アクティブなシートが削除されます。実行後の画像から、アクティブなシートが削除されていることが確認できます。

警告のアラートメッセージを出さずに削除する

警告が表示されるとシートの削除が一時停止され、手動での操作が必要になります。この挙動は、自動でシートを削除する際に邪魔になってしまいます。そこで、警告を出さずに処理を行うために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

vba_delete_sheet21

画像:実行前

vba_delete_sheet23

画像:実行後

このサンプルコードでは警告を出さずにシートを削除しています。そのため、実行前の画像から実行後の画像へとすぐに切り替わります。実行後の画像から、アクティブなシートが削除されていることも確認できます。

シートを指定して削除する方法

シートを指定して削除する方法には次の2通りの方法があります。

インデックス番号を指定して削除する方法

インデックス番号を指定してシートを削除するためには、次のように記述します。

Worksheets(インデックス番号).Delete

インデックス番号で指定したシートを削除する方法について、次のサンプルコードを確認してみましょう。

Sub Sample()
    Application.DisplayAlerts = False
    Worksheets(1).Delete
    Application.DisplayAlerts = True
End Sub

vba_delete_sheet21

画像:実行前

vba_delete_sheet23

画像:実行後

このサンプルコードでは1番目のシートを削除するためにWorksheets(1).Deleteと記述しています。実行後には1番目のシートが削除されていることが確認できます。

シート名を指定して削除する方法

シート名を指定してシートを削除するためには、次のように記述します。

Worksheets("シート名").Delete

シート名で指定したシートを削除する方法について、次のサンプルコードを確認してみましょう。

Sub Sample()
    Application.DisplayAlerts = False
    Worksheets("Sheet1").Delete
    Application.DisplayAlerts = True
End Sub

vba_delete_sheet21

画像:実行前

vba_delete_sheet23

画像:実行後

このサンプルコードではSheet1を削除するためにWorksheets(“Sheet1”).Deleteと記述しています。実行後にはSheet1が削除されていることが確認できます。

複数のシートをまとめて削除

複数のシートをまとめて削除したい場合には、Array関数を使って複数のシートを指定する方法が便利です。Array関数の引数にはインデックス番号、もしくはシート名を指定します。

Sub Sample()
    Application.DisplayAlerts = False
    Worksheets(Array("Sheet1", "Sheet3")).Delete
    Application.DisplayAlerts = True
End Sub

vba_delete_sheet51

画像:実行前

vba_delete_sheet52

画像:実行後

このサンプルコードでは、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

vba_delete_sheet51

画像:実行前

vba_delete_sheet52

画像:実行後

このサンプルコードでは、アクティブなシートを削除しないようにするためにActiveSheet.Move Worksheets(1)で先頭に移動しています。その後、For Eachステートメントでシート名がアクティブシートの名前と一致しない場合に削除しています。

これにより、結果としてアクティブでないシートを一括で削除できます。For Eachステートメントの使い方については、こちらで詳しく解説しています。ぜひ参考にしてください。

まとめ

いかがでしたか?今回はExcelVBAでシートを削除する方法について解説しました。とくにシートを一括で削除する方法は、しばしば作業の効率化に繋がります。

もし、ExcelVBAでシートを削除する機会があれば、この記事を思い出してみてください!

この記事を書いた人

フリーランスのエンジニアです。
最近では、プログラミング関連の記事を作成するライターとしても活動しています。

趣味と業務の両方でプログラミング言語をいくつも学んできたので
その経験を活かして分かりやすい記事を作成できればと考えています。

目次