今回はWorksheets.Deleteメソッド実行時に「実行時エラー’9’:インデックスが有効範囲にありません。」が出る原因と対処法を紹介したいと思います。

エラーが発生する原因
原因
結論から言うと削除対象のシートがブック内に無い可能性があります。
以下のコードを使って説明します。
Sub delete_targetSht_Error()
Dim targetShtName As String
targetShtName = "はりぼな"
ThisWorkbook.Worksheets(targetShtName).Delete
End Sub
コードについてざっくり説明するとtargetShtNameで指定した名前のシートを削除する、という非常にシンプルなものです。
実際に指定した名前のシートがないExcelで実行すると分かりますが、
ThisWorkbook.Worksheets(targetShtName).Delete
の行でエラーが出るはずです。これは、該当するシートがないのに削除する処理を実行したことで発生します。
このように、存在しないシートに対してDeleteを実行すると処理ができず、実行時エラー’9’が起こってしまうわけです。
対処法
対処法として、Worksheets.Deleteメソッド実行前に削除対象のシートがブック内にあるか事前に判定しておくのがお勧めです。
ざっくり言うとFor Each文とIf文を組み合わせて全てのシートを削除対象のシート名と比較する感じです。
こちらについては、以前投稿した「【Excel VBA】ブック内に特定の名前のシートがあるか判定するFunctionを紹介【備忘録】」で詳しく紹介しているので、こちらも併せてご覧ください!
まとめ
今回はWorksheets.Deleteメソッド実行時に「実行時エラー’9’:インデックスが有効範囲にありません。」が出る原因と対処法を紹介しました。
Worksheets.Deleteメソッド実行時にエラーが出る際は該当するシートがブック内に存在するか確認するようにしましょう!
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント