VBAで配列の配列を作成する

 VBAで複雑なプログラムを作る際に、多次元配列を使うと、どの次元が何にあたるか、ということを暗に管理しなくてはなりません。暗黙の意味は時が経つと忘れてしまうため、あまり好ましいものではありません。

 そのため、一次元配列の値として配列を入れ込みたいのですが、VBAはそんな親切な言語ではありません。

 ただし、ディクショナリの値として配列を持つことが可能ですので、ディクショナリを使うことで、疑似的な配列に配列を格納するということができます。

例としてはこんな感じになります。

   Dim cndSetIndex As Long
       cndSetIndex = -1
                       
   Dim conditions As Variant
   Dim condition As Variant
                       
   Dim conditionByIndex As Dictionary
   Set conditionByIndex = New Dictionary

   For Each conditions In conditionSet
  condition = Split(conditions, "$")
  cndSetIndex = cndSetIndex + 1
  conditionByIndex.Add Str(cndSetIndex), condition
   Next

この例は、conditionSetという配列の中の個々の値のなかに、区切り文字$で区切られた値があり、$で区切った文字列を配列として、conditionSetの順にConditonByIndexディクショナリに格納しています。

これにより、conditonSetの順に値を取り出しながら、$があるケースについては、$で区切られた分だけ繰り返し処理をするということが容易になります。これを多次元配列なんかで記述すると、何がなんだかわからなくなりますが、疑似配列のディクショナリを導入することで、意味を持ったコードを記述することができます。

なお、ディクショナリのキーとしては数字は持てませんので、文字列に変換して文字列の数字をキーとして配列を格納します。

この記事が気に入ったらサポートをしてみませんか?