Excel VBA の実行時エラー辞典

実行時エラー '9':インデックスが有効範囲にありません

シート名・ブック名の違い、配列の範囲外、未確保の配列を確認します。

よくある原因

直し方

  1. シートの場合は対象ブックとタブの名前を確認し、ThisWorkbook などで対象を明記します。
  2. 配列の場合は Dim・ReDim の位置と、要素が確保されているか確認します。
  3. 確保済みの配列は LBound と UBound で範囲を調べ、その範囲で繰り返します。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。

この配列の下限は 1 なので、0 番目の要素はありません。未確保の動的配列では LBound・UBound 自体も失敗します。

修正前

Dim names(1 To 2) As String, i As Long
For i = 0 To 2
    Debug.Print names(i)
Next i

修正後

Dim names(1 To 2) As String, i As Long
names(1) = "入力": names(2) = "集計"
For i = LBound(names) To UBound(names)
    Debug.Print names(i)
Next i

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. シート参照ならブック名とシート名、配列参照なら添字 i と上下限を比較します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? i, LBound(names), UBound(names)

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料