VBA

【VBAで配列をあつかう:入門編】

突然ですが、皆さんは配列を上手にあつかえていますか?

私は恥ずかしながら、ずっと苦手でした(笑)
苦手だった分、丁寧に解説したいと思います。

正直簡単なプログラムなら、配列を使用しなくても動作しますし、分からないから使わない!という方も多いのではないでしょうか?

VBAでも他のプログラム言語でも共通ですが、配列を使いこなすことによってプログラミングそのものが、変化します。

苦手意識を持つ方が非常に多いので、何回かに分けて配列の基礎から他のブログで触れられていないような高度な使い方等を説明していきます。

今回は初回なので、配列の宣言を種類ごとに説明します。

配列ってなに?

配列は変数の一種ですが、通常の変数は1つの変数に1つの値を代入しますが 、一つの変数に何個も値を代入してあつかうの事が出来ます。

配列変数に格納されたデータの一つ一つを「要素」と言い、要素番号(インデックス)を指定する事で、格納されたデータを扱うことが出来ます。

予め要素数と次元数が決まっている固定の配列を「固定長配列」といい、領域が動的に変わる可変の配列を「可変長配列」と言います。

1列のみの配列を「1次元配列」、複数列ある配列を「2次元配列」と言います。

3次元、4次元等多次元の配列をあつかう事も可能ですが、理解しにくい上にメモリを、とても消費するので2次元配列位までしか、実際の業務では使用しないと思います。

Excelで表現すると行のみ扱う場合が1次元、行列を扱う場合は2次元のようなイメージです。
2次元はExcelシートの形を想像してもらうと分かりやすいです。

配列の要素は基本的に0から始まります。

今は何を言っているか、理解できなくても大丈夫です。

配列を使うメリット・デメリット

配列のメリット

  • メモリ上で扱うため処理速度が速い
  • 型の指定が可能

配列のデメリット

    • 配列内での動きが頭の中に浮かばない
    • 配列内のデータ型などがよくわからない
    • インデックス(要素の指定が分からなくなる)

配列変数の宣言

前置きが長くなってしまいましたが、使い方の説明をしていきます。

使用する配列のパターンによって、いくつか宣言方法がありますので順に説明します。

固定長配列の宣言

1次元配列の宣言

Dim 配列名(下限値 to 上限値) As データ型

下限値は0から始まる場合は省略可能。
※配列の要素は0から始まります。

10個の数値データを配列入れる場合以下の様になります。

Dim 配列(0 to 9) As Integer

0を省略しても宣言できます。

Dim 配列(9) As Integer

これで、数値10個入れる変数が出来たことになります。

2次元配列の宣言

Dim 配列名(行の要素数,列の要素数) As データ型と行列の要素数をそれぞれ指定します。

の様に宣言します。

1次元配列と同じく、下限値は0から始まる場合は省略可能です。

10×10の数値を入れる2次元配列の宣言は以下の様になります。

Dim 配列2次元(0 to 9,0 to 9) As Integer

もしくは0を省略して、

Dim 配列2次元(9, 9) As Integer

可変長(動的)配列の宣言

Dim 配列名() As データ型で宣言します。

可変長配列は宣言時には、()のみ変数名につけます。
この時中身は指定しません。
※可変長配列は動的配列とも言います。

使用頻度が一番高いと思いますが、少し扱いが難しいです。
覚えると、とても便利です。

配列変数への値の代入

ここでは、値の代入・配列のコピー・使用まで一気にいきます!!
簡単なので、かまえなくても理解できると思います。

配列の構造を持ったデータは、そのまま同じデータ型の動的配列に代入することができます。
たとえば、次のプロシージャを実行すると、配列変数bの2番目の要素として「3」がメッセージボックスに表示されます。

Sub test()
    Dim a(2) As Integer '要素数3個の数値型配列を宣言
    Dim b() As Integer  '可変長配列の宣言
    a(0) = 1
    a(1) = 3
    a(2) = 5
    b() = a()           '配列aをbへコピー
    MsgBox b(1)
End Sub

配列の要素へ値を代入している場所は次の場所です。
a(0) = 1
a(1) = 3
a(2) = 5

一つずつ見ると通常の変数代入と同じだと分かると思います。
配列とは、ただの値(変数)の集合です。
簡単ですね!!

配列の要素へ値を代入している場所は次の場所です。
MsgBox b(1)

最初なので本当に簡単な内容ですが、メッセージボックスで要素の2番目の値を表示しています。
代入の時に説明しましたが、配列は0から始まるので1は2番目の要素になります。

配列は難しいと思っている方が多いと思いますが、基本はこれだけです。
まだ理解できていなくても全然大丈夫です。
次回ワークシートを使用して、値の出し入れなどをやっていくので、ゆっくり理解していけると思います。

まとめ

配列はシート上のセルのデータを扱うより、複雑になりますが大量のデータを扱えるため非常に便利です。

配列の理解は非常に重要なので、今回は宣言のみの記事にしました。
初心者の方が、記事を読んで配列を高度に出来るようにしていきたいので、ゆっくりと進めていきます。

次回は、配列を実際に使用してワークシートのデータをあつかいます。