
VBA(マクロ)でエクセルファイルを操作しているんだけど、
他人には見られたくない不要なシートがある…。
マクロでシートを削除することはできないの?

なるほど…。
古いデータや集計に使ったシートなど、削除したい場合がありますよね。
では今回は、「VBA(マクロ)でエクセルのシートを削除する方法」を
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
エクセルのシートを削除する方法(VBAマクロ)
「Delete」を使います。
まずは実行見本をどうぞ。
実行見本
ひとまず全コードと実行結果をご覧ください。
解説は後ほど行います。
全コード
Sub シートを削除()
Worksheets("Sheet2").Delete
End Sub
実行結果

※ダイアログ表示をスキップする方法も後ほど紹介します
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
プロシージャの作成
Sub シートを削除()
End Sub
プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。
シートを削除
Worksheets("Sheet2").Delete
上記コードにて、シートの削除を行っております。
【 Worksheets(“シート名“).Delete 】
Worksheets()の()内に、「削除したいシート名」を書きましょう。
シート名は「”(ダブルクォーテーション)」で囲ってください。
マクロが完成したら、実行して動作を確認してみましょう。

エクセル内に作成した自作のボタンを押してマクロを実行させることも可能です。
ボタンの作り方は、下記記事でわかりやすく解説しております。
確認ダイアログが不要な場合
実行結果でお見せしたとおり、このマクロを実行すると「削除しますか?」というような確認がダイアログで表示されます。
このダイアログ表示が不要の場合は、ダイアログを非表示にすることができます。
下記のVBAコードを見てください。
Sub シートを削除()
Application.DisplayAlerts = False ' 確認ダイアログを非表示
Worksheets("Sheet2").Delete
Application.DisplayAlerts = True ' 確認ダイアログを表示に戻す
End Sub
2行目と4行目が追加されただけです。
2行目で確認ダイアログを非表示にしています。
これでダイアログが表示されなくなります。
しかしながら、このままでは今後すべてのダイアログが表示されないままになってしまいますので、
4行目で設定を元に戻しています。
この一行を絶対に忘れないようにしましょう。
シートが削除できない場合の原因と対処法
シート削除のマクロを実行したけど、なぜかシートを削除することができなかった…。
そんな場合の主な原因と対処法を解説いたします。
存在しないシートを削除しようとした
削除しようとしたシートが存在しない場合は、
下図のようなエラーが発生します。

存在しないシートを削除しようとしたのですがら、当然といえば当然なのですが、
シート名を間違えて、存在しないシート名を指定した場合も同じです。
(正:Sheet1、誤:Sheeet1)
実際のシート名と、VBAコードで指定したシート名を見比べてみてください。
全角・半角、スペースあるなしなど、微妙に違うシート名を記述している可能性があります。
すべてのシートを削除しようとした
「Sheet1」のみが存在するブックにおいて、「Sheet1」を削除(ブックを空に)しようとすると下図のようなエラーが発生します。

すべてのシートを削除する(ブックを空にする)ことはできないということです。
こちらも当然といえば当然ですが、意外とやってしまいがちです。
シートを削除する際は、現在どのくらいのシートが残っているか把握しておくようにしましょう。
ブックが保護されている
ブックが保護されている場合、下図のようなエラーが発生し、シートを削除することができません。

エクセルメニューの「校閲」→「ブックの保護」をクリックして、ブックの保護を解除してからマクロを実行してください。

これまで、シート名を指定して削除する方法を紹介・解説いたしました。
しかしながら、シート名がわからない場合もあるかと思います。
そんな場合もシートの削除は可能ですので次項で紹介いたします。
いろいろな方法(シート削除)
シート名が不明な場合は、特定の条件でシートを削除することができます。
シート番号を指定して削除
シート名ではなく、シート番号を指定して削除することもできます。
下記VBAコードを見てください。
Sub 番号でシートを削除()
Application.DisplayAlerts = False
Worksheets(2).Delete
Application.DisplayAlerts = True
End Sub
3行目に注目です。
(2)というのが、「左から2番目のシート」という意味です。
一番左のシートなら(1)を指定してください。
シートが大量にあって、一番右のシートを指定したい場合は、(Sheets.Count)と記述してください。
アクティブシートを指定して削除
アクティブシート(現在選択されているシート)を削除することもできます。
下記のVBAコードを実行してください。
Sub アクティブシートを削除()
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
特定の文字を含むシート名を一括削除
特定の文字を含んだシートをすべて削除することも可能です。
今回は、「仮」を含むシートを削除した例です。

Sub 特定の文字を含むシートを一括削除()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If InStr(ws.Name, "仮") > 0 Then
ws.Delete
End If
Next ws
Application.DisplayAlerts = True
End Sub
コードの2行目で、変数「ws」を宣言しております。
※wsは、以降シート名を取得するために使用
変数や宣言については、下記記事でわかりやすく解説しております。ご参考ください。
コードの4~8行目で、シートの取得・シート名の確認・削除を繰り返しています。
コードの5~7行目にて、シート名に「仮」が含まれていればシートを削除、それ以外はスキップしています。
条件分岐に使用したIf文については下記記事でわかりやすく解説しております。ご参考ください。
1つのシート以外をすべて削除
必要なシートを1つだけ残して、それ以外をすべて削除することもできます。
Sub ひとつのシート以外をすべて削除()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "残すシート" Then ws.Delete
Next ws
Application.DisplayAlerts = True
End Sub

シートを削除するのが心配な場合は
本当はシートを削除したいけれど、データが完全に消えたり、セルの参照に不具合が出るのが心配…。
そんな時は、シートを非表示にしてみましょう。
シートを非表示にする方法
下記のVBAコードを実行することで、シートを非表示にすることができます。
Sub シートを非表示()
Worksheets("Sheet2").Visible = xlSheetHidden
End Sub

しかしながら、この方法では手動で再表示にされてしまいます。

次に紹介する方法は、手動では再表示できません。
シートを完全に非表示にする方法
「xlSheetVeryHidden」を指定することで、シートを完全に非表示にすることができます。
Sub シートを完全に非表示()
Worksheets("Sheet2").Visible = xlSheetVeryHidden
End Sub

今回は手動で再表示できません。

再表示するには、VBAで再表示する必要があります。
次項をご参考ください。
シートを再表示する方法
下記VBAコードを実行することで、非表示になったシートを再表示することができます。
Sub シートを再表示()
Worksheets("Sheet2").Visible = xlSheetVisible
End Sub

うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
また今回の場合は、存在しないシートやブックが保護されているシートを削除しようとした場合に発生します。
「シートが削除できない場合の原因と対処法」を参考に対処してみてください。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
VBAでエクセルシートを削除する方法を解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!