エクセルシートを削除する。Deleteの使い方と注意ポイント

vbasheetdeleteeyecatch

エクセルVBAでシートを削除するにはDeleteメソッドを利用します。
シートを削除するためには、要チェック項目や禁止項目もあります。
コード実行後は復元が出来ません。注意が必要です。

こんにちは じゅんぱ店長 (@junpa33) です。

エクセルBOOK内の整理整頓で、不要なシートを削除したい時があると思います。

また例えば、使い回しが必要なエクセルBOOKで、再利用時に一旦デフォルトの状態に戻すために、要らなくなったシートを削除したい場合もあると思います。

そんな時、シートを削除するために使うのは、「Deleteメソッド」です。

今回は、このDeleteメソッドについてです。

他にもシートをデフォルトに戻したいという場合、クリアーメソッドを使うパターンもあります。

こちらで説明しています。

vbacleareyecatch シートクリアーを目的のメソッド別にVBA最速理解

シートの削除にはDeleteメソッドを使う

vbasheetdeletep002

Deleteでシートの削除を行うことが出来ます。

最大の注意点として、一度でもシートの削除を行うと、その削除されたシートは元に戻すことは出来ません。

エクセルBOOK内のすべてのシートを削除することは出来ません。最低1枚のシートは残さなければなりません。

Deleteメソッドの記述方法

Deleteの基本の構文

シートオブジェクト.Delete

「Sheet1」を削除したい場合は、

VBA
Sub シートの削除1()
        Worksheets("Sheet1").Delete
End Sub

Worksheets(“Sheet1”).Delete と記述します。

「Sheet1」が一番左にある時は、

Worksheets(1).Delete としてもOKです。

シートの削除の注意点

シートを削除する時の注意点は多々あります。

  • シートを削除するとそのシートを復活させることは出来ない
  • 削除実行時に「確認メッセージ」が表示されてVBAコード進行がSTOPする。
  • VBAプログラム内で、削除シート名でコード指定(記述省略も含めて)していた場合は削除後はその指定部分からエラーが発生します。
  • シートカウント(インデックス番号)でループなどを組み立てている場合は、シート数が減少するので、カウンター変数部分でコードの手直しチェックが必要になる。
  • などなど

兎に角。オブジェクトが消滅することによって、そのシートの指定やシート内のセルの指定が全てコード実行時にエラーになりますので、十分な注意が必要になります。

VBAコードを組み立てる最初の時点で「シートの削除」を前提としたコード設計を行うようにしましょう。

確認メッセージの非表示方法

シートの削除コードを実行すると「確認メッセージ」が表示され、一旦コード実行がストップします。

vbasheetdeletep001
確認メッセージ

「確認メッセージ」を非表示にするVBAコードを削除のコードより前に記述し、後に「確認メッセージ」の表示を戻すコードを付け加えます。

.DisplayAlerts = False で非表示

.DisplayAlerts = True で表示

になります。

VBA
Sub シートの削除2()
    Application.DisplayAlerts = False
  ・・・・・
  ・・・・・
    Application.DisplayAlerts = True
End Sub

複数のシートを同時に削除する場合

複数枚のシートを削除する場合は、Array関数でシートを指定することが出来ます。

複数枚の削除の場合

Worksheets(Array( “シート名1” , “シート名2” ,・・・) ).Delete

シート名でもインデックス番号でも可です。

Sheet1からSheet4まであるエクセルBOOKで、Sheet2からSheet4までを一度に削除する、VBAコードの一つの記述例は次のようになります。

VBA
Sub シートの削除3()
    Application.DisplayAlerts = False
    Worksheets(Array("Sheet2", "Sheet3", "sheet4")).Delete
    Application.DisplayAlerts = True
End Sub

1枚を残してそれ以外すべてのシートを削除する場合

エクセルBOOKで一枚のシートを残して他全てを削除するコードを考えます。

シートのインデックス番号を利用して、For~Nextでループを組みます。

一番左のシートを残して他全てを削除

ループさせる順はインデックス番号を降順で行います。(ループする毎にインデックス番号が減少していきます。)

カウンター変数とインデックス番号の最大値を一致させながらループすることで、実行時エラーを防止します。

VBA
Sub シートの削除4()
    Dim i As Long
    Application.DisplayAlerts = False
        For i = Worksheets.Count To 2 Step -1
            Worksheets(i).Delete
        Next i
    Application.DisplayAlerts = True
End Sub

削除しないシートを指定して他全てを削除

削除しないシートを「Sheet3」に指定します。If条件文を使用します。

VBA
Sub シートの削除5()
    Dim i As Long
    Application.DisplayAlerts = False
        For i = Worksheets.Count To 1 Step -1
            If Worksheets(i).Name <> "Sheet3" Then
                Worksheets(i).Delete
            End If
        Next i
    Application.DisplayAlerts = True
End Sub

まとめ

vbasheetdeletep003

シートの削除はエクセルを使用する上では、必ず必要となる知識と技術です。

Deleteメソッドを利用して行いますが、これはエクセルBOOKを構成するオブジェクトを削除するということです。

なので、シート名が無くなる、シート数が変わることで、VBAコード実行時に「実行時エラーNo.9」(インデックスか有効範囲外)が発生することが考えられます。

十分にVBAコードをチェックしたうえで、シート削除を行うことが重要です。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。