「配列って聞いたことあるけど、使い方とかよくわからない」ってことありませんか?
配列を使うと、処理を高速化したり、利便性の向上であったり、様々なメリットがあります。
今回は、そんな便利な配列について簡単に解説していきます。
- 配列について知りたい
- 初期化、宣言、再定義について知りたい
- 要素数を取得したい
- 要素を取得したい
配列とは
配列を使うことで、同じ型のデータをまとめて扱えます。
変数だと1つの値しか格納できませんが、配列は複数の値を格納でき、インデックス番号を使うことで、それぞれのデータにアクセスすることができます。
例えるなら変数が一軒家なのに対し、配列はアパート、マンションといった感じで、インデックス番号は部屋番号のようなものです。
変数 ≒ 一軒家
配列 ≒ アパート、マンション
配列の基本的な使い方
配列には、「静的配列」、「動的配列」の2種類あり、配列の宣言の仕方も多少変わってきます。
「静的配列」は、要素数が固定、「動的配列」は、要素数が可変のため、配列をどう使いたいかで使い分けてください。
静的配列
動的配列
上図でボックスにそれぞれ番号が振られているのをインデックス番号と言います。
配列の各要素にアクセス(要素を格納、取得)したいとなったときに、インデックス番号でアクセスできます。
要素の最初は”0″になるので注意しましょう。
(配列を宣言する際に、インデックス番号の開始値を設定することも可能です。)
宣言
「静的配列」と「動的配列」の宣言では、配列の上限値を指定するかどうかの違いのみです。
静的配列
Dim 配列名(上限値) as データ型
配列の下限値を設定することも可能です。
Dim 配列名(下限値 To上限値) as データ型
静的配列
Dim 配列名() as データ型
初期化
初期化には、「Erase」、「Array」の2通りの方法があります。
Erase
Erase 配列名
配列のデータ型によって、初期化した後の中身が変わってきます。
- 数値型 → 0(数値)
- 文字列型 → “”(からの文字列)
Array
配列名 = Array()
Arrayは、動的配列のみで使用できます。
初期化した際、要素がなくなるため、配列を再定義する必要があります。
Arrayを使って初期化した場合、中身が消えるため、注意しましょう。
再定義
「ReDime」を使って、配列を再定義することができます。
ReDim 配列名(上限値) As データ型名
「ReDim」を使って再定義した場合、中身がなくなるため、中身を保持したいというときは、「Preserve」を使いましょう。
ReDim Preserve 配列名(上限値)
配列の要素数を取得する方法
「LBound」、「UBound」を使うことで、配列の要素数をカウントすることができます。
要素数 = UBound関数の戻り値 - LBound関数の戻り値 + 1
「LBound」は、配列のインデックス番号の最小値、
「UBound」は、配列のインデックス番号の最大値を取得することができます。
配列の要素を取得する方法
For Next で要素を取得
For Next で配列のインデックス開始値から終了値まで繰り返し処理をすることで、配列のすべての要素を取得することができます。
Sub test()
Dim arr(2) As Integer 'インデックス0~2の配列を定義
Dim msg As String
'配列に要素を格納
arr(0) = 1
arr(1) = 2
arr(2) = 3
For i = LBound(arr) To UBound(arr)
msg = msg & arr(i)
If i 2 Then
msg = msg & ", "
End If
Next
MsgBox msg
End Sub
●実行結果
For Nextについては、以下の記事をご参照ください。
if文については、以下の記事をご参照ください。
Excel VBA If文 複数条件の分岐処理は”Or”を使う!
For Each で要素を取得
For Each でもFor Next と同様に、配列のすべての要素を取得することができます。
コードとしては、For Next の方がスッキリするため、For Next を使うことをおすすめします。
Sub test()
Dim arr(2) As Integer 'インデックス0~2の配列を定義
Dim msg As String
Dim cnt As Long
'配列に要素を格納
arr(0) = 1
arr(1) = 2
arr(2) = 3
For Each tmp In arr
msg = msg & tmp
If cnt 2 Then
msg = msg & ", "
End If
cnt = cnt + 1
Next tmp
MsgBox msg
End Sub
●実行結果
For Eachについては、以下の記事をご参照ください。
if文については、以下の記事をご参照ください。
Excel VBA If文 複数条件の分岐処理は”Or”を使う!
まとめ
ここまで、Excel VBAの配列の使い方について解説しました。
配列を使うことで、高速化、利便性の面で大きなメリットがあるため、ぜひお試しください。