エラーメッセージ「実行時エラー ‘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’ を防ぐ一番の近道です。

