
Excel VBA 「インデックスが有効範囲にありません」というエラーは、VBAコードで配列やコレクションのインデックス、またはワークシートのインデックスを指定する際に、存在しないインデックスを指定した場合に表示されます。
サンプルコードをもとに具体的な対処方法を解説します。
📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!
👇実務で“そのまま使える”テンプレ付きで、コピペするだけ!
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き
Excel VBA インデックスが有効範囲にありませんのエラー発生する原因
Excel VBAを使っているときに、「インデックスが有効範囲にありません」というエラーに遭遇したことはありませんか?このエラーは、プログラムが指定したインデックスが存在しない場合に発生します。
エラーが発生する主な原因
以下のような原因があります。
配列のインデックスが範囲外になっている場合
Dim arr(1 To 3) As Integer
arr(4) = 10 ' エラー: インデックスが有効範囲にありません
ワークシートやワークブック、セル範囲などのコレクションで存在しないインデックスを指定した場合
Sheets(5).Select ' ワークブックに4枚しかシートがない場合、エラー
セル範囲を超えた参照をした場合
Range("A1:A10")(11).Value = "Test" ' A1:A10の範囲外
エラーを解消する基本の対処方法
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
エラーを防ぐための対処方法は以下の通りです
1.配列の範囲を確認
配列のインデックスが正しい範囲内にあることを確認します。
Dim arr(1 To 3) As Integer
If LBound(arr) <= 4 And UBound(arr) >= 4 Then
arr(4) = 10
Else
MsgBox "インデックスが有効範囲にありません"
End If
2.ワークシートやコレクションのインデックスを確認
ワークシートやコレクションのインデックスが有効範囲内にあることを確認します。
If Sheets.Count >= 5 Then
Sheets(5).Select
Else
MsgBox "指定されたシートは存在しません"
End If
3.セル範囲のインデックスを確認
セル範囲を超えた参照がないか確認します。
Dim rng As Range
Set rng = Range("A1:A10")
If rng.Cells.Count >= 11 Then
rng.Cells(11).Value = "Test"
Else
MsgBox "セル範囲が有効範囲にありません"
End If
・配列の範囲やコレクションの要素数を常に確認することが重要です。
・コード内で動的に範囲やインデックスを扱う場合は、エラーハンドリングを行う。
エラーを防ぐExcel VBAサンプルコード
Option Explicit
Sub CheckArrayIndex()
Dim arr(1 To 3) As Integer
Dim index As Integer
index = 4
If LBound(arr) <= index And UBound(arr) >= index Then
arr(index) = 10
Else
MsgBox "インデックスが有効範囲にありません"
End If
End Sub
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
ワークシートインデックスのエラー防止
Option Explicit
Sub CheckSheetIndex()
Dim sheetIndex As Integer
sheetIndex = 5
If Sheets.Count >= sheetIndex Then
Sheets(sheetIndex).Select
Else
MsgBox "指定されたシートは存在しません"
End If
End Sub
コレクションで発生するエラーを防ぐ
Option Explicit
Sub CheckDictionary()
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "Key1", "Value1"
If dict.Exists("Key2") Then
MsgBox dict("Key2")
Else
MsgBox "Key2は存在しません"
End If
End Sub
これらの方法で、Excel VBAで「インデックスが有効範囲にありません」エラーを回避し、安定したコードを作成できます。
「Excel VBAで自動化するコードのベースが習得できる解説書」 Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。