ここでは、ワークシートを削除する VBA のサンプルスクリプトを掲載しています。VBA でもエクセル同様に全てのシートを削除することは出来ません。1枚以上シートが存在する必要があります。
スポンサーリンク
1枚目を残してすべてのシートを削除する
複数枚のシートがある場合に、最初のシートのみ残して 2枚目以降のシートをすべて削除するサンプルスクリプトになります。
' シート数(枚数)を取得 Dim sheetCount As Long sheetCount = Worksheets.Count ' シートの枚数が2より少ない場合には何もしない If sheetCount < 2 Then Return End If Dim i As Long For i = 2 To Worksheets.Count ' 2枚目のシートを削除する Worksheets(2).Delete ' 以下のようにインデックスを指定するとエラーが発生する(後述) 'Worksheets(i).Delete Next
Worksheets.Delete でのエラー
上記のサンプルコードで実際に Worksheets.Delete メソッドを呼び出している部分をコメントアウトしているようにインデックスを指定するように変更すると、以下のエラーが発生します。
実行時エラー ‘9’ インデックスが有効範囲にありません。
このエラーは、削除するたびにインデックスが更新されるために発生します。例えば、元々 10枚のシートがあった場合にはインデックスは1~10まですが、1シート削除するとインデックスは1~9までとなります。
削除する回数と削除するインデックスの違いを正しく理解することが重要です。
なお、ここで示したインデックス ( 2 ) 固定の削除方法よりは、最後のシートを削除するようにするなどの方法を採用して、不細工なコードを避けるようにしたほうが良いでしょう。