【Excel VBA】シートの削除(Delete)

はじめに

今回は、シートの削除について解説します。
シート削除時に表示される警告メッセージを非表示にする方法や、複数のシートを削除する方法なども併せて解説しています。
ぜひ最後までお付き合いください。

この記事を読むメリット
  • シートを削除する方法が分かります。
  • 警告メッセージを非表示にする方法や、複数シートを削除する方法についても解説します。
  • コピペで使える実践的なサンプルコードを掲載しています。

基本情報

Deleteメソッド

シートを削除するには、WorksheetオブジェクトのDeleteメソッドを使用します。

構文

Worksheetオブジェクト.Delete

削除時のメッセージについて

Deleteメソッドによってシートを削除する際に、Excelから「シートを本当に削除するか」の確認メッセージが出力され、マクロが一時停止してしまいます。

ApplicationオブジェクトのDisplayAlertsプロパティをFalseにすることで、メッセージを非表示にすることが出来ます。
詳細は、サンプルコード – 名前を指定してシートを削除するを参照ください。

削除時の警告メッセージ

サンプルコード

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

以下のサンプルコードでは、アクティブブックの先頭と末尾のシートを削除します。
Worksheetsに名前を指定し、狙ったシートのみを削除しています。

サンプルコード
Public Sub deleteWorksheet()

    ' 警告メッセージを非表示にする
    Application.DisplayAlerts = False

    ' アクティブ状態のブックの Sheet1を削除する
    ActiveWorkbook.Worksheets("Sheet1").Delete

    ' 警告メッセージの非表示設定を解除する
    Application.DisplayAlerts = True
End Sub

先頭や末尾のシートを削除する

以下のサンプルコードでは、アクティブブックの先頭と末尾のシートを削除します。
Worksheetsには、シート名だけではなくインデックス(シートの位置)の指定も可能です。

サンプルコード
Public Sub deleteWorksheet()

    ' 警告メッセージを非表示にする
    Application.DisplayAlerts = False

    ' 先頭のシートを削除する
    ActiveWorkbook.Worksheets(1).Delete

    ' 末尾のシートを削除する
    ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count).Delete

    ' 警告メッセージの非表示設定を解除する
    Application.DisplayAlerts = True
End Sub

複数シートを削除する

以下のサンプルコードでは、アクティブブックのSheet1とSheet2のシートを削除します。
Arrayを使用することで、複数シートを指定することが可能です。
※Arrayにはシート名でもOKなのですが、シートのインデックスを指定することも可能です。

サンプルコード
Public Sub deleteWorksheet()

    ' 警告メッセージを非表示にする
    Application.DisplayAlerts = False

    ' アクティブ状態のブックの Sheet1 と Sheet2 を削除する
    ActiveWorkbook.Worksheets(Array("Sheet1", "Sheet2")).Delete

    ' 警告メッセージの非表示設定を解除する
    Application.DisplayAlerts = True
End Sub

指定したシート名以外のシートを削除する

以下のソースコードでは、アクティブブック内のSheet1以外のシートをすべて削除します。
「このシートだけ以外を全部削除したい!」という場合もあるかと思いますので、ご使用ください。
※ハイライト箇所を場合により変更ください!

サンプルコード
Public Sub deleteWorksheet()

    ' Activeブック内のSheet1以外のシートを削除する
    Call deleteWorksheetForExclusiveName(ActiveWorkbook, "Sheet1")
End Sub

Public Sub deleteWorksheetForExclusiveName(ByVal wbObj As Workbook, ByVal leaveSheetName As String)
    Dim wsObj As Worksheet  ' Worksheetオブジェクト

    ' 警告メッセージを非表示にする
    Application.DisplayAlerts = False

    For Each wsObj In wbObj.Worksheets

        ' シート名の判定
        If wsObj.Name <> leaveSheetName Then

            ' 指定された名前以外のシートを削除する
            wsObj.Delete
        End If
    Next wsObj

    ' 警告メッセージの非表示設定を解除する
    Application.DisplayAlerts = True
End Sub

最後に

今回は、シートの削除について解説しました。

本記事では、マクロが一時停止しないよう、すべてのサンプルコードに警告メッセージを非表示にするコードを入れていますが、場合によって、当該処理を削除するなどしてご使用頂けると助かります。

本記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA