Excel VBAでマクロやプログラムを実行する際、特定の条件下で「実行時エラー9:インデックスが有効範囲にありません」というエラーメッセージが表示されることがあります。このエラーは、配列やコレクションに存在しないインデックス番号や名前が指定された場合に発生します。この記事では、このエラーがどのような状況で発生するのか、そしてそれをどう解決するのかについて詳しく解説します。
エラーの発生原因とは?
まずインデックスとは、配列やコレクションで各要素を特定するための番号や名前のことを指します。VBAにおいては、配列のインデックスは通常0から始まります。それに対して、コレクションのインデックスは通常1から始まる場合が多いです。「インデックスが有効範囲にありません。」エラーは配列やコレクションで指定したインデックスが存在しない場合に発生します。下記で具体例を見てみましょう。
配列におけるエラーの例
サンプルコード:配列のインデックスエラー
Dim ary As Variant, i As Long
ary = Array(1, 2, 3, 4, 5)
For i = 1 To 5
Cells(i, 1) = ary(i)
Next i
処理の流れ
Dim ary As Variant
で、Variant型の配列ary
を宣言しています。ary = Array(1, 2, 3, 4, 5)
で、配列ary
に1から5までの整数を代入しています。For i = 1 To 5
のループで、Cells(i, 1) = ary(i)
として各セルに値を代入しています。
このコードでは、ary(i)
としてi
が5
のときにエラーが発生します。なぜなら、VBAの配列は0から始まるため、ary(5)
は存在しないからです。
サンプルコード:配列のインデックスエラーの修正
Dim ary As Variant, i As Long
ary = Array(1, 2, 3, 4, 5)
For i = 1 To 4
Cells(i, 1) = ary(i)
Next i
処理の流れ
For i = 0 To 4
と修正して、0から4までのループに変更します。Cells(i + 1, 1) = ary(i)
として、セルに値を代入します。
この修正により、エラーが発生しなくなります。
コレクションにおけるエラーの例
サンプルコード:ワークシートのインデックスエラー
Worksheets(3).Activate
処理の流れ
Worksheets(3).Activate
で、3番目のワークシートをアクティブにしようとしています。
このコードは、ワークシートが2つしかない場合、3番めのワークシートが存在しないため、エラーが発生します。
サンプルコード:ワークシートのインデックスエラーの修正
If Worksheets.Count >= 3 Then
Worksheets(3).Activate
Else
MsgBox "3番目のワークシートが存在しません。"
End If
処理の流れ
If Worksheets.Count >= 3 Then
で、ワークシートが3つ以上あるか確認します。- 3つ以上あれば、
Worksheets(3).Activate
で3番目のワークシートをアクティブにします。 - そうでなければ、メッセージボックスで警告を出します。
この修正により、エラーを防ぐことができます。
エラー対処のポイント
- 「インデックスが有効範囲にありません」エラーは、存在しないインデックスを指定した場合に発生します。
- 配列は通常0から始まるため、その点を考慮する必要があります。
- コレクション(例:Worksheets)の場合、存在する要素数を確認することでエラーを防ぐことができます。
以上が「VBAエラー9:インデックスが有効範囲にありません」についての解説です。この情報が皆さんのVBAプログラミングに役立つことを心より願っています。
関連動画
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome