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

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

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

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

シートの削除とは

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

vba_delete_sheet11

画像:削除前

vba_delete_sheet12

画像:削除後

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

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

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

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

vba_delete_sheet21

画像:実行前

vba_delete_sheet22

画像:実行時

vba_delete_sheet23

画像:実行後

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

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

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

Application.DisplayAlertsを使うには、次のように記述します。

  • Application.DisplayAlerts = False
  • 警告を出さないようにしています。

  • Application.DisplayAlerts = True
  • 警告を出すように戻しています。

Application.DisplayAlertsがFalseである間は、一切の警告が出ないようになります。警告が必要な処理に影響を与えないようにするために、警告が不要な処理が終わったら警告を出すように戻しましょう。

それでは、次のサンプルコードで警告を出さずにシート削除する方法を確認してみましょう。

vba_delete_sheet21

画像:実行前

vba_delete_sheet23

画像:実行後

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

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

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

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

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

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

vba_delete_sheet21

画像:実行前

vba_delete_sheet23

画像:実行後

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

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

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

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

vba_delete_sheet21

画像:実行前

vba_delete_sheet23

画像:実行後

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

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

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

vba_delete_sheet51

画像:実行前

vba_delete_sheet52

画像:実行後

このサンプルコードでは、Array関数を使って複数のシート名を指定し、まとめてシートを削除しています。

アクティブでないシートすべてを一括で削除

アクティブでないシートすべてを一括で削除するためにFor Eachステートメントを使い、次のようにします。

vba_delete_sheet51

画像:実行前

vba_delete_sheet52

画像:実行後

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

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

【VBA入門】For Eachで配列やコレクション、Selectionを操作
更新日 : 2019年4月23日

まとめ

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

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

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

イシキ マコト

イシキ マコト

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

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説