【VBA】エラー「インデックスが有効範囲にありません」の原因と解決法

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次