エクセルVBAでシートを削除するにはDeleteメソッドを利用します。
シートを削除するためには、要チェック項目や禁止項目もあります。
コード実行後は復元が出来ません。注意が必要です。
こんにちは じゅんぱ店長 (@junpa33) です。
エクセルBOOK内の整理整頓で、不要なシートを削除したい時があると思います。
また例えば、使い回しが必要なエクセルBOOKで、再利用時に一旦デフォルトの状態に戻すために、要らなくなったシートを削除したい場合もあると思います。
そんな時、シートを削除するために使うのは、「Deleteメソッド」です。
今回は、このDeleteメソッドについてです。
他にもシートをデフォルトに戻したいという場合、クリアーメソッドを使うパターンもあります。
こちらで説明しています。
シートクリアーを目的のメソッド別にVBA最速理解- シートの知識
- シートの存在を確認する2種類のコードと実務での例題
- シートクリアーを目的のメソッド別にVBA最速理解
- シートのコピーを最速に理解!VBAコードで異なる結果
- Excelシートを追加・挿入するAddメソッドの使い方
- シートの選択・指定方法とその意味。簡単でも軽視してはダメ
- エクセルシートの名付け・変更と取得そして一覧化するコード
- ワークシートのブック内移動と新規ブックへの移転を分かりやすく
- エクセルシートの並び順が思い通り!シート名一覧で自由自在
- Excelシートを保護する。 記述方法とプロテクトされない操作
- エクセルシートを削除する。Deleteの使い方と注意ポイント
- エクセルシートの非表示コードをパスワード管理するVBA
- ワークシートを変数化する3つの手法 オブジェクト変数など
コンテンツ
シートの削除にはDeleteメソッドを使う
Deleteでシートの削除を行うことが出来ます。
最大の注意点として、一度でもシートの削除を行うと、その削除されたシートは元に戻すことは出来ません。
エクセルBOOK内のすべてのシートを削除することは出来ません。最低1枚のシートは残さなければなりません。
Deleteメソッドの記述方法
シートオブジェクト.Delete
「Sheet1」を削除したい場合は、
Sub シートの削除1()
Worksheets("Sheet1").Delete
End Sub
Worksheets(“Sheet1”).Delete と記述します。
「Sheet1」が一番左にある時は、
Worksheets(1).Delete としてもOKです。
シートの削除の注意点
シートを削除する時の注意点は多々あります。
- シートを削除するとそのシートを復活させることは出来ない
- 削除実行時に「確認メッセージ」が表示されてVBAコード進行がSTOPする。
- VBAプログラム内で、削除シート名でコード指定(記述省略も含めて)していた場合は削除後はその指定部分からエラーが発生します。
- シートカウント(インデックス番号)でループなどを組み立てている場合は、シート数が減少するので、カウンター変数部分でコードの手直しチェックが必要になる。
- などなど
兎に角。オブジェクトが消滅することによって、そのシートの指定やシート内のセルの指定が全てコード実行時にエラーになりますので、十分な注意が必要になります。
VBAコードを組み立てる最初の時点で「シートの削除」を前提としたコード設計を行うようにしましょう。
確認メッセージの非表示方法
シートの削除コードを実行すると「確認メッセージ」が表示され、一旦コード実行がストップします。
「確認メッセージ」を非表示にするVBAコードを削除のコードより前に記述し、後に「確認メッセージ」の表示を戻すコードを付け加えます。
.DisplayAlerts = False で非表示
.DisplayAlerts = True で表示
になります。
Sub シートの削除2()
Application.DisplayAlerts = False
・・・・・
・・・・・
Application.DisplayAlerts = True
End Sub
複数のシートを同時に削除する場合
複数枚のシートを削除する場合は、Array関数でシートを指定することが出来ます。
Worksheets(Array( “シート名1” , “シート名2” ,・・・) ).Delete
シート名でもインデックス番号でも可です。
Sheet1からSheet4まであるエクセルBOOKで、Sheet2からSheet4までを一度に削除する、VBAコードの一つの記述例は次のようになります。
Sub シートの削除3()
Application.DisplayAlerts = False
Worksheets(Array("Sheet2", "Sheet3", "sheet4")).Delete
Application.DisplayAlerts = True
End Sub
1枚を残してそれ以外すべてのシートを削除する場合
エクセルBOOKで一枚のシートを残して他全てを削除するコードを考えます。
シートのインデックス番号を利用して、For~Nextでループを組みます。
ループさせる順はインデックス番号を降順で行います。(ループする毎にインデックス番号が減少していきます。)
カウンター変数とインデックス番号の最大値を一致させながらループすることで、実行時エラーを防止します。
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条件文を使用します。
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
まとめ
シートの削除はエクセルを使用する上では、必ず必要となる知識と技術です。
Deleteメソッドを利用して行いますが、これはエクセルBOOKを構成するオブジェクトを削除するということです。
なので、シート名が無くなる、シート数が変わることで、VBAコード実行時に「実行時エラーNo.9」(インデックスか有効範囲外)が発生することが考えられます。
十分にVBAコードをチェックしたうえで、シート削除を行うことが重要です。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。