配列を使っていますか?
今回は、動的配列でのエラーの原因・対処方法について説明していきます。
「インデックスが有効範囲にありません。」原因・対処方法
動的配列に値を入れて、実行すると以下のように「実行時エラー’9′,
インデックスが有効範囲にありません。」とエラー表示された場合の原因・対処方法について説明します。
考えられる原因
配列を宣言したが、要素数を指定していない
動的配列のインデックス関係のエラーはこの原因が一番多いと思われます。
動的配列では、配列の要素数を自由できるものの、データを格納する前にあらかじめ要素数を指定する必要があります。
それを知らなかったり、忘れていたりする場合、エラーが出た理由を解決できないことに陥ってしまいます。
解決策としては、配列変数にデータを格納する前に、あらかじめRedimステートメントを使用して以下のように要素数を指定することです。
Redim 変数名(要素数)
参考:Excel VBA入門 その26:【入門編】配列の記述方法(前編)【保存版】
具体的コード例は以下のようになります。
Sub 動的配列()
Dim hairetu() As Variant
ReDim hairetu(3) '()内に要素数を指定する。
・・・
End Sub
存在しない配列の要素を参照した
次に多い原因が、存在しない配列の要素を参照してしまったものです。
特に、配列のインデックス番号が「0」から始まることを忘れている場合が多く見られます。
具体的には、要素数が「3」に指定したにも関わらず、インデックス番号「3」を指定してしまった場合などです。
もし、配列のインデックス番号の下限値を「0」ではなく「1」に変更したい場合は、Option Baseステートメントを使用して、以下のように記述します。
Option Base 1
これで配列の下限値が「1」になります。
ちなみに、Option Baseステートメントは、モジュールの先頭にある宣言セクションに記述します。具体的コード例は以下のとおりです。
Option Base 1 'Option Baseは、先頭にある宣言セクションに記述する
Sub 動的配列()
Dim hairesu() As Variant
.......
End Sub
【まとめ】「動的配列のエラー」原因・対処方法
動的配列は要素数を自由に決めることができますが、配列変数にデータを格納する前に要素数を指定しなくてはなりません。
また、配列のインデックス番号は特に指定しない場合は「0」から始まるため、 存在しない配列の要素を参照させてしまうことがあります。
配列は、変数と違ってとっつきにくいものがありますが、慣れてしまえばなんてことありません。
Excel V\BAは、習うより慣れろです!
参考:Excel VBA入門 その71:実行時エラー 1004 マクロが無効の対処方法
コメント
[…] 参考:Excel VBA入門 その30:「動的配列のエラー」原因・対処方法 […]
[…] 参考:Excel VBA入門 その30:「動的配列のエラー」原因・対処方法 […]