Excel VBA入門 その30:「動的配列のエラー」原因・対処方法

エクセルVBA VBA



配列を使っていますか?

今回は、動的配列でのエラーの原因・対処方法について説明していきます。



「インデックスが有効範囲にありません。」原因・対処方法

動的配列に値を入れて、実行すると以下のように「実行時エラー’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 マクロが無効の対処方法

コメント

  1. […] 参考:Excel VBA入門 その30:「動的配列のエラー」原因・対処方法 […]

  2. […] 参考:Excel VBA入門 その30:「動的配列のエラー」原因・対処方法 […]

タイトルとURLをコピーしました