配列の宣言と固定長配列、動的配列

配列とは同じデータ型の入れ物が1つ以上まとまった大きな箱のようなものです。配列内の1つ1つのデータを要素といい、各々の要素には添字(インデックス)を指定することでアクセスが可能です。配列は繰り返し処理と組み合わせることでその真価を発揮します。

スポンサーリンク

配列の宣言

配列の宣言するには変数名の後ろにカッコと添字の下限値・上限値を指定します。あくまで指定するのは添字であって、要素数でないことに注意してください。データ型の指定やスコープについては変数を宣言する場合と同じです。

構文
Dim [配列名] ([添字の下限値] To [添字の上限値]) as [データ型]

要素数は(添字の上限値 – 添字の下限値 + 1)となります。

添字の下限値は省略することが可能で、省略した場合の下限値はモジュールオプション Option Base により決まります。

  • “Option Base”ステートメントが指定されていない場合
    Dim Points(10) As Integer    '添字は0~10まで
  • “Option Base 1″が指定されている場合
    ※Optionは標準モジュールの最上部に記述してください。
    Option Base 1
    Dim Points(10) As Integer    '添字は1~10まで

  モジュールオプション 配列を使用したサンプル

2次元配列の宣言

2次元以上の配列を宣言する場合は、次元毎にカンマで区切ります。添字下限値は指定しても、省略してもどちらでも構いません。

構文
Dim [配列名] ([添字の下限値], [添字の上限値], …) as [データ型]

生徒40人分の国語・英語・数学の点数を格納するための配列を宣言して使用する例

Dim Points(1 To 40, 1 To 3) as Integer

Points(1, 1) = 55      '出席番号1番の国語の点数を格納
Points(1, 2) = 60      '出席番号1番の英語の点数を格納
Points(1, 3) = 80      '出席番号1番の数学の点数を格納
Points(2, 1) = 75      '出席番号2番の国語の点数を格納
Points(2, 2) = 80      '出席番号2番の英語の点数を格納
Points(2, 3) = 60      '出席番号2番の数学の点数を格納

配列の添字上限・下限を調べる方法

配列の添字下限値・上限値はそれぞれ LBound 関数、UBound 関数を使用することでわかります。

Dim test(3 To 12, 6 To 8) As Integer

Debug.Print LBound(test, 1)     '1次元目の添字下限値3が表示されます。
Debug.Print UBound(test, 1)     '1次元目の添字上限値12が表示されます。
Debug.Print LBound(test, 2)     '2次元目の添字下限値6が表示されます。
Debug.Print UBound(test, 2)     '2次元目の添字上限値8が表示されます。

上記のように、配列の宣言時に要素数が決まっているものを固定長配列といいます。固定長配列は後述するReDimステートメントによって次元数や要素数などを変更することはできません。

動的配列の宣言

予め次元数や要素数が決まっていないような場合は動的配列として配列を宣言し、処理中にその要素数などを再設定することができます。

動的配列の宣言は変数名の後ろにカッコのみを指定します。

構文
Dim [配列名] () as [データ型]

動的配列の変更(その1)

処理中に配列の次元数や要素数を変更したい場合はReDimステートメントを使用します。 次元数や要素数の指定の仕方は固定長配列の宣言と同じです。

構文
ReDim [配列名] ([添字の下限値], [添字の上限値], …) as [データ型]
  • ReDimステートメントを使用して配列の要素数などを変更した場合、もとのデータはすべて消えてしまいます。
  • データ型の変更ができるのは動的配列宣言時にバリアント型で宣言した場合だけです。バリアント型以外で動的配列を宣言した場合はデータ型の変更はできませんので、配列を変更するときにデータ型の指定は不要です。

動的配列の変更(その2)

ReDimステートメントを使用すると配列内のデータがすべて消えてしまいますが、それでは困る場合があります。こんなときは、データを保持したまま配列の要素数を変更できるReDim Preserveステートメントを使用します。

構文
ReDim Preserve [配列名] ([添字の上限値])

最後の次元の添字上限値のみ変更できます。データ型、次元数、添字下限値の変更はできません。

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