VBA シートを削除する

はじめに

Excel VBA マクロのシートで削除する方法を紹介します。

Sheets.Delete または Worksheets.Delete メソッドから、シートを削除できます。

Application.DisplayAlerts プロパティから、確認メッセージを表示しないで削除できます。

シートを追加するには「シートを追加する」をご覧ください。
シートを指定して取得するには「シートを取得する」をご覧ください。
  • 目次
    • シートを削除する
    • アクティブシートを削除する
    • 別ブックの指定してシートを削除する

シートを削除する

sheet1

Sheets の引数にインデックスかシート名を指定すると、そのシートを削除できます。

1 番左のシートを削除するには Sheets(1).Delete または Worksheets(1).Delete を入力します。1 番左のシートが 1 です。

Sheets(1).Delete        ' 1 番左のシートを削除
Sheets("Sheet1").Delete ' シート「Sheet1」を削除

Worksheets(1).Delete        ' 1 番左のワークシートを削除
Worksheets("Sheet1").Delete ' ワークシート「Sheet1」を削除
5

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

  • Sheets:すべてのシートを取得
  • Worksheets:ワークシートのみ取得(グラフシートなどは取得しない)

シートを削除するときに確認メッセージが表示されます。

4

メッセージを表示しないで削除するには Application.DisplayAlerts = False を入力します。削除したら True に戻します。

Application.DisplayAlerts = False ' メッセージを非表示
Sheets(1).Delete
Application.DisplayAlerts = True  ' メッセージを表示

複数のシートを削除

1 番目と 2 番目のシートを削除するには Sheets(Array(1, 2)).Delete または Sheets(Array("Sheet1", "Sheet2")).Delete のように入力します。

Sheets(Array(1, 2)).Delete               ' 1 番目と 2 番目のシートを削除
Sheets(Array("Sheet1", "Sheet2")).Delete ' シート「Sheet1」と「Sheet2」を削除

Worksheets(Array(1, 2)).Delete               ' 1 番目と 2 番目のシートを削除
Worksheets(Array("Sheet1", "Sheet2")).Delete ' シート「Sheet1」と「Sheet2」を削除

引数に配列でインデックスやシート名を指定します。

すべてのシートを削除

すべてのシートを削除すると「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。

必ず 1 つはシートを残す必要があります。

指定したシート以外をすべて削除するには次のように入力します。

Application.DisplayAlerts = False ' メッセージを非表示

Dim ws As Worksheet
Set ws = ActiveSheet ' 残すシート

Dim s As Variant
For Each s In Sheets ' すべてのシートを削除
    If s.Name <> ws.Name Then
        s.Delete
    End If
Next

Application.DisplayAlerts = True  ' メッセージを表示

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

アクティブシートを削除するには ActiveSheet.Delete を入力します。

ActiveSheet.Delete

アクティブシートとは、開いているシートのことです。

選択シートを削除

アクティブブックの選択しているシートを削除するには ActiveWindow.SelectedSheets.Delete を入力します。複数のシートが選択されているときは、そのすべてのシートを削除します。

ActiveWindow.SelectedSheets.Delete           ' 選択しているすべてのシートを削除
ActiveWindow.SelectedSheets(1).Delete        ' 選択している 1 番左のシートを削除
ActiveWindow.SelectedSheets("Sheet2").Delete ' 選択しているシート「Sheet2」を削除

VBA を実行しているブックの選択しているシートを削除するには ThisWorkbook.Windows(1).SelectedSheets.Delete を入力します。

' このコードを実行しているブックの選択シートを削除
ThisWorkbook.Windows(1).SelectedSheets.Delete

' 開いているブック「Book1.xlsx」の選択シートを削除
Workbooks("Book1.xlsx").Windows(1).SelectedSheets.Delete

SelectedSheets のインデックスは、選択している中で 1 番左のシートが 1 です。

ブックの指定について詳しくは下記の「別ブックのシートを削除する」をご覧ください。

別ブックの指定してシートを削除する

ブックを指定しないシートの操作はすべて「アクティブブック」に対して行われます。

  • アクティブブック:開いているすべてのブックの中で一番手前に表示されているブックです。
  • VBA を実行しているブック:実行している VBA のコードがあるブックです。

アクティブブック

ブックを指定しないシートの操作は、アクティブブックを表す ActiveWorkbook. が省略されています。

' どちらも同じコード
Call Sheets.Add
Call ActiveWorkbook.Sheets.Add
ショートカットや VBA の IDE から実行したときに、別ブックがアクティブになっていることがあります。

VBA を実行しているブック

VBA を実行しているブックに対して操作するには ThisWorkbook を入力します。

' VBA を実行しているブックに対して操作
Call ThisWorkbook.Sheets.Add
Call ThisWorkbook.Worksheets.Add

ブックを指定

ブックを指定するには Workbooks の引数にブック名またはインデックスを指定します。

ブック「Book2.xlsx」を指定するには Workbooks("Book2.xlsx") を入力します。

' ブック「Book2.xlsx」のシート「Sheet1」を削除
Call Workbooks("Book2.xlsx").Sheets("Sheet1").Delete

' 2 番目のブックの 1 番目のシートを削除
Call Workbooks(2).Sheets(1).Delete

Workbooks のインデックスは、ブックを開いた順番に 1 からスタートします。