今回はシート取得時に実行時エラー ‘9’:「インデックスが有効範囲にありません。」が出る原因と対処法を備忘録も兼ねて紹介したいと思います。
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-8.png)
原因
結論から言うと指定したシート名に誤りがある可能性があります。
以下のコードを使って説明します。
Sub test_GetSheetError()
Dim mySht As Worksheet
Set mySht = Sheets("Sheet1")
MsgBox mySht.Name
End Sub
指定したシートを取得し、そのシート名をメッセージボックスに出力するという極めてシンプルなマクロなのですが、実行してみるとSet mySht = Sheets("Sheet1")
のところでエラーが発生してしまいます。
これは、Sheets("Sheet1")
の「1」が全角になっており、「Sheet1」という名前のシートが見つからないからエラーが起きてしまった、ということになります。
'取得したいシート名(正)
Sheets("Sheet1")
'指定したシート名(誤)
Sheets("Sheet1")
対処法
対処法としてはもうシンプルに「取得したいシートの名前が間違っていないか。」これに尽きます。
具体的には、
- そもそものシート名が間違っていないか
- 数字,の全角・半角が一致しているか
- 前後にブランク(スペース)が入っていないか
単純ではありますが、意外とやるミスなので取得できないときは上記3点を確認してみましょう。
ちなみに余談ですがExcelのシートでSheet1
のようになっている場合、SHEET1
で指定しても取得することが出来ます。
正直役に立つかは微妙ですが、頭の片隅に入れておくいいかもしれません。
'「Sheet1」を取得したい時
Set mySht = Sheets("Sheet1")
'こっちでも可
Set mySht = Sheets("SHEET1")
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-9.png)
まとめ
今回はシート取得時に実行時エラー ‘9’:「インデックスが有効範囲にありません。」が出る原因と対処法を備忘録も兼ねて紹介しました。
シート取得時に上記エラーが発生する時は、取得したいシート名に誤りがないかを確認するようにしましょう!
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント