「配列には動的配列と静的配列があるって来たけど、違いは何?」「動的配列なんて理解しなくても困っていない」と思っているあなた!動的配列と静的配列の違いを理解して、次なるステップに飛躍しましょう!
要素数が固定される静的配列
入門者向けには、「配列は、複数の箱が用意された入れ物です」などと説明されることが多く、次のようなコードを示されたりします。
Sub 配列入門用コード()
Dim StaticArray(1 to 5) As Variant
Dim i As Long
For i = 1 To 5
StaticArray(i) = i
Next
End Sub
配列を「Dim 変数名(要素数)」というように宣言しています。これは静的配列と呼ばれるもので、配列の宣言時に、要素数を定める配列です。
宣言時に要素数を確定させる配列になるので、コードの実行の都度、要素数の変更が無かったり、実行の途中で要素数を変動させる必要が無い場合に使う変数です。
要素数に変数を使えるのが動的配列
静的配列に慣れてくると、「要素数を都度宣言するのが面倒」と感じてきます。そこで次のように、要素数の指定に変数を使いたくなります。A列の要素数を、配列の要素数として宣言してみます。
Sub NGコード例()
Dim MyArray(WorksheetFunction.CountA(Range("A:A"))) As Variant
End Sub
実行結果
コンパイルエラーになりました。これはなぜかというと、静的配列の要素数は、定数にする必要があるからです。
一方、動的配列は、要素数は定数である必要がありません。動的配列は、「Dim変数名() ReDim変数名(要素数) 」という風に宣言します。
Sub OKコード例()
Dim MyArray() As Variant
ReDim MyArray(WorksheetFunction.CountA(Range("A:A")))
End Sub
今度はコンパイルエラーになりません。コードを見て分かるように、動的配列のメリットは、要素数に変数を使えることなのです。このメリットにより、コードの使い回しが出来るようになり、コーディングの効率がUPしたり、要素数の宣言のミスが原因のエラーが無くなります。
また、ReDimはプロシージャ内で何度でも使うことが出来るため、要素数の追加も動的配列では可能です。
Sub 要素数を何回も変える()
Dim MyArray() As Variant
ReDim MyArray(WorksheetFunction.CountA(Range("A:A")))
ReDim MyArray(10)
ReDim MyArray(WorksheetFunction.Sum(Range("B:B")))
End Sub
まとめ
- 静的配列は要素数を宣言時点で固定し、変更することは出来ない
- 動的配列は要素数に変数を使うことが出来、コードの途中で要素数の変更も可能
コメント