【VBAマクロ】エクセルのシートを削除する方法を徹底解説!【初心者向け】

スポンサードリンク
VBA
過去の自分
過去の自分

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
1つ以外のシートをすべて削除
スポンサードリンク

シートを削除するのが心配な場合は

本当はシートを削除したいけれど、データが完全に消えたり、セルの参照に不具合が出るのが心配…。
そんな時は、シートを非表示にしてみましょう。

シートを非表示にする方法

下記の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
Sheet2を再表示した例
スポンサードリンク

うまく動作しないときの対処法

エラーが発生する

コンパイルエラー・実行時エラー

コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。

また今回の場合は、存在しないシートやブックが保護されているシートを削除しようとした場合に発生します。
シートが削除できない場合の原因と対処法」を参考に対処してみてください。

警告表示

マクロが無効になっている表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。

スポンサードリンク

最後に

VBAでエクセルシートを削除する方法を解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました