配列変数の利用

さて、前項まではセル→セルの転記の話でしたが、セルの値をマクロのコード内で別利用する場合の方法を一部紹介します。これは例えばCSV形式テキストファイルとの入出力などで利用できるものです。

変数については、以前に若干触れていますから省略しますが、今回はその変数の配列を利用します。

まず、配列変数の宣言方法です。

Dim A(9) As String

この宣言では、「A」という名前の10個の文字列型変数の配列が用意されます。
9」なのに10個なのは、インデックスはゼロ始まりだからです。「1」始まりの10個ならば、


Dim A(1 To 10) As String

というように宣言します。
この宣言は「静的配列」ですから、このまま値をセットしたり、参照したりできます。


A(1) = "hogehoge"
A(2) = "hugehuge"

CSV形式テキストファイルからデータを読み込む場合で、カラム数(カンマで区切られた要素数)が固定であればこの方法が利用できます。

では、要素数がその場にならないと決まらない場合はどうでしょうか。
この要素数自体を変数にしてしまいます。


Dim A() As String
Dim IX As Long

IX = 100
ReDim A(IX)

この「動的配列」はDimステートメントだけでは利用できません。利用するにはReDimステートメントでの初期化が必要となります。
上では「IX = 100」としましたが、このIXがプロシージャが動く段階でセットされるようになっていれば、配列に収容済みの値を保持させたまま、自在に要素数を増やすことができるわけです。

さらに、読み込んでみないと要素数が決まらない上、その読み込みを行なう場合の各要素を配列に入れなければならない場合があります。
あらかじめ最大値を決めておいて、ReDimステートメントで初期化してしまう場合もありますが、全く不定な場合は次のようにします。


Dim A() As String
Dim IX As Long

IX = 0
Do While IX <= 99
    ReDim Preserve A(IX)
    A(IX) = "hogehoge"
    IX = IX + 1
Loop

PreserveキーワードをReDimステートメントに使うと、配列は初期化されずに要素数だけが変更されます。

では、次のページに進んで、これを元にセル範囲と配列変数とのやりとりを行なってみましょう。


VBAで利用できる配列は一次元だけではありません。  このページでは一次元の単純な配列だけを取り上げていますが、ワークシートのような二次元配列も扱えます。使うかどうかは別にすれば最大60次元まで扱えるようです。 ですが、問題となるのは複数次元の配列を作成する場合、キーワード「Preserve」を使って値を保持したまま要素数が変更できるのは最終次元だけだということです。 つまり、行方向(縦=y)×列方向(横=x)といったワークシートのような二次元配列の場合、「A(y, x)」となるわけですが、 ここでは列方向(横=x)の要素数は動的に増やせるのですが、行方向(縦=y)には増やせないということになります。