[ Excel-VBA ] ワークシートを削除する ( 実行時エラー ‘9’ インデックスが有効範囲にありません。 )

Pocket

ここでは、ワークシートを削除する 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 ) 固定の削除方法よりは、最後のシートを削除するようにするなどの方法を採用して、不細工なコードを避けるようにしたほうが良いでしょう。

参考
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>