VBAにおける変数の配列

Excel VBA

以前の頁でも変数についてご説明してきましたが、今回はその変数の、「配列」についてご説明します。

変数の配列

1つの変数には、1つの値しか持つことができません。 ですが配列として変数を宣言することで、複数の値を保持できるようになります。

配列の宣言

通常の変数とほぼ同じ宣言になりますが、()内に配列の大きさを数値で指定することで、配列として宣言できます。

構文を見てみましょう。

Dim 配列名(数値) As 型

この数値は配列としていくつ変数を作るかを示します。

簡単に配列を使ったメッセージでのプログラム例を記述してみます。

Sub HairetsuMsg()
    Dim Mojiretsu(2) As String
    Mojiretsu(1) = "配列テスト1"
    Mojiretsu(2) = "メッセージ2"
    MsgBox (Mojiretsu(1))
    MsgBox (Mojiretsu(2))
End Sub

このように配列の番号を変えることで別々の値を保持することができます。 

インデックス

変数の配列において、()内にある番号のことをインデックスといいます。 インデックスはデフォルトでは0から始まり、指定したインデックスの数値までの配列が生成されます。 つまり、配列の大きさを3で宣言すると、4つの配列が生成されることになります。

ちょっとややこしいので、例を見てみましょう。

Sub HairetsuMsg()
    Dim Mojiretsu(2) As String
    Mojiretsu(0) = "配列テスト1"
    Mojiretsu(1) = "メッセージ2"
    Mojiretsu(2) = "テスト用"
    MsgBox (Mojiretsu(0))
    MsgBox (Mojiretsu(1))
    MsgBox (Mojiretsu(2))
End Sub

このプログラムは正常に終了します。 インデックスが0でも、有効になっていることがわかりますね。

それでは、試しに宣言した配列よりも大きいインデックスに代入してみます。

Mojiretsu(3) = "テスト"     'インデックスが宣言した数値よりも大きい

この1文を入れて実行すると、エラーが表示されます。

つまり,インデックスが宣言された数値よりも大きいと、実行時エラーとなりプログラムが中断されてしまいます。

このため、配列を扱う場合には注意が必要となります。

インデックスの開始値の変更

変数のインデックスはデフォルトでは0から始まりますが、1に変更することができます。

Option Base 1

このステートメントをモジュール冒頭に記述することで、インデックスを0か1に変更することができます。 デフォルトが0となっているため、このステートメントを記述する機会は1に変更する場合のみですね。

このステートメントはプロシージャ内には記述することができず、モジュールの冒頭部に記述する必要があります。 モジュール単位で変更してしまうため、他のプロシージャに影響を及ぼさないよう注意する必要があります。

動的配列

配列も変数と同様に、通常はプロシージャの冒頭部で宣言します。 ですがプログラムの途中で、必要に応じて配列を大きくすることが可能です。 こういった固定数ではなく、プログラムの中で拡張する配列を、「動的配列」と呼びます。

動的配列も冒頭部で宣言しますが、インデックス数は指定せずに()のみで宣言することになります。 宣言しただけの状態ですとインデックスがないため、「Redim」でインデックスを作ってから使うことになります。

構文を見てみましょう。

Dim 配列名()
Redim 配列名(最大インデックス数) 
Redim Preserve 配列名(最大インデックス数)

「Preserve」を付けるか付けないかで、2通りの指定方法があります。 「Preserve」を付けると、配列にすでに保持していた値を、維持しながら拡張します。 逆に「Preserve」を付けなければ、配列は全てリセットされ、初期値に戻ります。

今回のまとめ

  • 配列はプロシージャ冒頭で宣言する
  • 配列の番号はインデックスという
  • 動的な配列としてプログラムの途中でも拡張だけ可能

次回はこの配列を使い、前回作った勤務時間の集計プログラムを、もう一度見直してみたいと思います。

コメント

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