配列って概念がわかってても、いろいろと約束事があってよくわからないですよね。
今回は、これさえ読めば、とにかく配列を使えるようになる、ということに特化した記事です。
理論的なことは知らん!
とにかくVBAで配列を使いたい!
という人にオススメです。
配列の最低限の知識
とはいえ、配列を使うからには、最低限知らなければならない知識があります。
本当に最小限にとどめていますので、読むだけ読んでみてくださいね!
配列とは、1つの変数に複数のデータを入れること。
配列は1つの変数に複数のデータ、すなわち「値」を入れるものです。
「配列」という言葉の響きが、何か特別な意味を感じさせますが、要するに配列は変数のことです。
1つの変数に複数のデータを入れることが配列なのです!
じゃあどうやって1つの変数に複数のデータを入れるのか?
変数の中にデータを入れる部屋を作る
変数の中にデータを入れる部屋をいくつも作るのです。
1つの部屋には、データを1つ入れられます。
つまり、1つの変数の中に部屋をいくつも作り、その中にデータを入れることが配列と言えるのです。
じゃあ、部屋はどうやって作るの??
という疑問を解決するには、次の項目に進んでください。
配列の部屋の作り方(理論編)
変数に中に部屋を作る方法は、2通りあります。
- 静的配列
- 動的配列
ざっくりと説明します。
静的配列とは、あらかじめ部屋数を決めてから部屋を作成すること。
変数を配列にするには、その変数の中に部屋を作る必要があります。
その際に、あらかじめ何部屋作成するかを決めてから部屋を作成する場合、その配列を「静的配列」と呼びます。
例えば、変数に5つのデータを入れることがあらかじめ決まっていれば、5つの部屋を作る必要があります。
あらかじめ5つのデータがあることがわかっているから、変数に5つの部屋を作る。
→その後、変数の各部屋にデータを入れる。
事前にデータ数がわかっているから、あらかじめ部屋数を決めて部屋を作る。
VBA用語的に言うと「要素の上限値を指定して宣言する配列を静的配列という」といいます。
これが静的配列です。
動的配列は、部屋を作成する前にあらかじめ部屋数を決めておかないこと。
データ数が初めからわかっていない場合があります。
データ数が流動的になる場合も当然あります。
例えば、仕入れの品目をデータ数とする場合、その日その日によって仕入れる品目(データ数)が異なる場合が当然あります。
その場合、あらかじめ部屋数を決めておくことはナンセンスです。
仕入れ毎に部屋数を変更する必要があります。
あらかじめ作成する部屋数を決めておかない配列を「動的配列」と呼びます。
VBA用語的に言うと「要素の上限値を指定せずに配列を宣言することを動的配列という」といいます。
すべてを理解する必要はありません。
あやふやでも良いので、とりあえず次へ進みましょう!
さて、次はいよいよ配列の記述方法を解説します!
記述方法と言っても、難しく考える必要はありません。
要するに、
- 変数に部屋を作る
- 作った部屋にデータ(値)を入れる
- 部屋に入れたデータを(必要なときに)取り出す
たったこれだけのことです。
ではやっていきましょう!
配列の記述方法
配列の記述方法1 変数に部屋を作る
変数に部屋を作るには、
- あらかじめ作る部屋数を決めておく「静的配列」
- あらかじめ作る部屋数を決めておかない「動的配列」
があります。
静的配列と動的配列では、記述方法が少しだけ異なります、、が、「データを入れるための部屋を作る」という基本は同じです。
静的配列と動的配列それぞれにおける部屋の作り方を説明します。
静的配列の部屋の作り方
変数をDimで宣言する際に、ついでに作成予定の部屋の数を記述します。
ちなみに、部屋数を専門用語で「要素数」と言います。
静的配列の記述方法、すなわち宣言方法は、以下のようになります。
Dim 変数名(部屋数-1) As データ型
配列変数を宣言するときには、変数名の後ろの()内に配列の要素数(部屋数のこと)を数字で記述します。
()内の数値は、部屋の番号が「0」から始まるため、本来作成予定の部屋数から「1を引いた数」を記述します。
「データ型」については、部屋に入れる予定のデータ型を指定します。
文字列ならString、数字ならLong、、、といった感じです。
部屋を作成すると、各部屋に部屋番号が付されます。
3つの部屋を作ったら、以下のように部屋番号が付されます。
- 部屋番号 0
- 部屋番号 1
- 部屋番号 2
部屋番号は、なにも指定しなければ0から始まります。
慣れないうちは、なんでも入るデータ型のVariantでも問題ありません。
以下の説明は、もう少し詳しく知りたい人が読んでくださいね。そうじゃない人は、「静的配列の部屋の作り方のコード例」まで飛ばしてくださいね☆☆☆
静的配列の宣言方法は、より正確には以下のように記述します。
Dim 変数名(上限値) As データ型
ちなみに、()内の数値のことを「インデックス番号」と呼びます。
インデックス番号は下限値が「0」であるため、配列変数を宣言するときは、要素数(つまり部屋数)から「1」を引いた数を()内に記述します。
この数をインデックス番号の「上限値」といいます。
静的配列の部屋の作り方のコード例
それでは、静的配列の部屋の作り方の具体例を示します。
今回は配列にする変数を「hensu」、作る部屋数を「3」とします。
Sub 静的配列()
Dim hensu(2) As Variant '()内に「部屋数-1」を記述する
End Sub
これで、配列変数「hensu」にデータを入れる部屋が3つ作成されました。
要するに、Dimで宣言する変数名に、()を付けて、その()内に「作る部屋数ー1」の数字を記述すれば配列ができるのです。
これで作られた部屋番号は、
部屋番号0~2になります。
とても簡単ですね!!
次は、動的配列の場合を説明します。。。が、静的配列だけで満足した人は無理に動的配列を学習する必要はありません。動的配列を使うときが来たときに戻ってきてくださいね。
動的配列の部屋の作り方
動的配列では、変数をDimで宣言する際に、静的配列と違って、作成予定の部屋数を記述せずに、変数名の後ろに()を付けるだけにします。
Dim 変数名() As データ型
Redim 変数名(部屋数ー1)
静的配列と違って、動的配列では、宣言のときに変数名の後ろの()内に数値を記述しません。
あくまで宣言時のタイミングで()内に部屋数を記述しないだけで、実際にデータを部屋に入れるまでに部屋数を記述する必要があります。
宣言時に部屋数を記述しなかった代わりに、Redimというステートメントを使って部屋数を記述します。
Redimはデータを部屋に入れる前に記述する必要があります。
部屋が何部屋あるかわからないとデータを入れられない決まりになっています。
宣言時に部屋数を指定していないので、データ数に応じて部屋数を自由に変更できるのです。
これが「動的」という由来です。
百聞は一見に如かずです。具体例を見てみましょう。
動的配列の部屋の作り方のコード例
静的配列と同様に、今回も配列にする変数を「hensu」、作る部屋数を「3」とします。
Sub 動的配列()
Dim hensu() As Variant '宣言時には、()内に部屋数を記述しない
ReDim hensu(2) '()内に「部屋数-1」を記述する
End Sub
動的配列の記述のポイントは、以下のようになります。
- 変数の宣言時には、()内に部屋数を記述しない。
- Redim で()内に「部屋数-1」を記述する。
とはいえ、、、
なんでわざわざ部屋数をRedimで記述するの??
変数を宣言するときに、()内に部屋数を書けばよくね??
と思いますよね。じつは、変数宣言時に部屋数を決めずに、Redimで部屋数を指定するメリットがあるのです。
下のエクセル表を見てください。
この表が本日仕入れた果物のリストだとします。
本日は5つの果物を仕入れたので、配列を使う場合は部屋数が5になります。
ですが、次の日は仕入れた果物が6つになるかもしれません。4つかもしれません。
このようにデータ数が変動する場合、あらかじめ配列の部屋数を決めずに、その都度エクセル表に沿って部屋数を決めたほうが良い場合があります。
今回の仕入れリストについて、動的配列として部屋を作る場合のコードは以下の通りです。
Sub 動的配列2()
Dim hensu() As Variant '宣言時には、()内に部屋数を記述しない
ReDim hensu(Cells(Rows.Count, 1).End(xlUp).Row -1) '表の最終行を取得し、それを配列の部屋数にしている
MsgBox UBound(hensu) '配列の部屋数(要素数)を表示する
End Sub
少し難しいかもしれませんが、要するに、表の最終行を部屋数としてRedimで部屋を作成しています。
表の最終行=部屋数にすることで、データ数の増減に対応できます。
4行目のMsgbox~は、配列の部屋数を表示するコードです。
上のコードを実行してみると、果物の数が部屋数として表示されます。
このことが意味しているのは、静的配列のように変数を宣言するときに部屋数を決めてしまうと、データ数が毎回異なるような場合に対応できない、ということです。
動的配列のように部屋数をあとから決めれば、部屋数を可変(動的)にすることができます。
難しいかもしれませんが、要するに、
どのタイミングで部屋数を決めるか
の違いだと認識していれば問題ありません。
このように、あらかじめ部屋数を決めない動的配列の部屋の作成方法や使い道がわかったと思います。
次回以降は、
- 配列の記述方法2 作った部屋にデータ(値)を入れる
- 配列の記述方法3 部屋に入れたデータを(必要なときに)取り出す
について解説していきます。
コメント
[…] 参考:Excel VBA入門 その26:【入門編】配列の記述方法(前編)【保存版】 […]
[…] 参考:Excel VBA入門 その26:【入門編】配列の記述方法(前編)【保存版】 […]
[…] 参考:Excel VBA入門 その26:【入門編】配列の記述方法(前編)【保存版】 […]
[…] 参考:Excel VBA入門 その26:【入門編】配列の記述方法(前編)【保存版】 […]