Excel VBA インデックスが有効範囲にありません|原因と対処コード

 

Excel VBA 「インデックスが有効範囲にありません」というエラーは、VBAコードで配列やコレクションのインデックス、またはワークシートのインデックスを指定する際に、存在しないインデックスを指定した場合に表示されます。

 

サンプルコードをもとに具体的な対処方法を解説します。

 

Excel VBAで効率化の準備をしてみませんか?2025年をよりスムーズに過ごすための資格
基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事

 

Excel VBA インデックスが有効範囲にありませんのエラー発生する原因

Excel VBAを使っているときに、「インデックスが有効範囲にありません」というエラーに遭遇したことはありませんか?このエラーは、プログラムが指定したインデックスが存在しない場合に発生します。

 

エラーが発生する主な原因

以下のような原因があります。

1.配列の範囲外アクセス

配列のインデックスが範囲外になっている場合

Dim arr(1 To 3) As Integer
arr(4) = 10 ' エラー: インデックスが有効範囲にありません

 

2.コレクションやワークシートの存在しないインデックス指定

ワークシートやワークブック、セル範囲などのコレクションで存在しないインデックスを指定した場合

Sheets(5).Select ' ワークブックに4枚しかシートがない場合、エラー

 

3.セル範囲の無効な参照

セル範囲を超えた参照をした場合

Range("A1:A10")(11).Value = "Test" ' A1:A10の範囲外

 

エラーを解消する基本の対処方法

 

対処方法

エラーを防ぐための対処方法は以下の通りです

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

ワークシートインデックスのエラー防止

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で自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。