エラーメッセージ「実行時エラー ‘9’: インデックスが有効範囲にありません」の原因と解決方法を紹介します!

目次
原因とよくあるパターン
主な原因 | 説明 |
---|---|
存在しないシート名を指定 | "Sheet2" というシートが実際には存在しない |
シート名のスペルミス | "Summary " (スペース含む)など、見えないミスが多い |
シートインデックスがずれている | Sheets(3) などの数値指定で、存在しない番号を指定している |
配列要素の範囲外アクセス | myArray(5) と書いたが、配列は 0〜4 までしか存在しない |
Workbookの参照先がずれている | Workbooks("xxx.xlsx").Sheets(1) の ブックが開かれていない |
🔻 原因①:存在しないシート名を指定している
💥 NGコード
' このブック内に「Sheet3」という名前のシートが存在しない場合、エラーが発生
Sheets("Sheet3").Select
✅ OKコード
' 実在するシート名に正しく一致させることでエラーを回避
Sheets("Sheet1").Select
🔻 原因②:シート名のスペルミス
💥 NGコード
' 本来は「Summary」だが、末尾にスペースがあるため一致せずエラーになる
Sheets("Summary ").Select
✅ OKコード
' シート名の余計な空白や誤字に注意
Sheets("Summary").Select
🔻 原因③:インデックスの指定ミス(存在しない番号)
💥 NGコード
' シート数が 3 枚しかないのに、5 番目のシートを指定してエラー
Sheets(5).Select
✅ OKコード
' 例えば 3 枚のシートがあるなら、1〜3 を指定すればOK
Sheets(2).Select
🔻 原因④:配列のインデックスが範囲外
💥 NGコード
Dim arr(2) As String ' 要素数は 0~2 の3つ
' 存在しない index 3 にアクセスしようとしてエラー
MsgBox arr(3)
✅ OKコード
Dim arr(2) As String ' 0, 1, 2 の3要素
' 正しい index を指定して表示
MsgBox arr(1)
🔻 原因⑤:開かれていないブックを参照
💥 NGコード
' 「Sales.xlsx」が開かれていないとエラーになる
Workbooks("Sales.xlsx").Sheets(1).Select
✅ OKコード
' 「Sales.xlsx」がまだ開かれていない場合、開いてからシートを選択する
Workbooks.Open "C:\Users\YourName\Documents\Sales.xlsx"
Workbooks("Sales.xlsx").Sheets(1).Select
✅ まとめ|エラー ‘9’ の多くは「指定ミス」
「インデックスが有効範囲にありません」は、
存在チェックを怠ったことによる指定ミスが9割以上です。
VBAでのエラー回避は以下がポイントです:
- シート名は 定数化 or 存在確認付きで扱う
- 配列やコレクションは 上限確認 を使う
- 他ブック・他シートの操作前には 前提条件をチェック
✅「指定先が本当に存在しているか?」を毎回確認することが、実行時エラー ‘9’ を防ぐ一番の近道です。