VBA(Visual Basic for Applications)を使ってマクロを作成するとき、配列の扱いは非常に重要な要素となります。配列をうまく使えば、同じ種類のデータを効率的に管理・処理することができます。しかし「どうやって初期化すればよいのか?」「要素数はどうやって数えるのか?」といった基本的な疑問を持つ方も多いでしょう。
この記事では、VBAにおける配列の初期化方法と要素数の取得方法について、初心者にもわかりやすく解説します。基本から応用までを丁寧にまとめていますので、ぜひ最後までご覧ください。
配列とは何か?VBAにおける基本概念
配列とは、同じ型の複数のデータをまとめて扱うための構造です。たとえば「複数の売上データ」や「氏名一覧」などを1つの変数に格納できます。VBAでは、次のようにして配列を宣言します。
Dim fruits(2) As String
この場合、fruits(0)
、fruits(1)
、fruits(2)
の3つの要素を持つ配列が作成されます。VBAの配列は「0」から始まるのが基本です。
配列の初期化方法
配列の初期化にはいくつかの方法があります。
固定長配列の初期化
要素数があらかじめ分かっている場合は、次のように固定長で宣言できます。
Dim scores(4) As Integer
この例では、5つの整数(0〜4番目のインデックス)を格納できる配列になります。値を代入するには以下のようにします。
scores(0) = 10
scores(1) = 20
可変長配列の初期化
要素数が実行時に決まる場合には、次のように可変長配列を使います。
Dim items() As String
ReDim items(3)
ここで、ReDim
を使って要素数を設定しています。
配列の再初期化(再定義)
可変長配列は、ReDim
を使って再定義できます。ただし、再定義すると以前のデータは消える点に注意が必要です。
ReDim items(5) ' 元のデータは消える
もしデータを保持したまま要素数だけ変更したい場合は、Preserve
を使います。
ReDim Preserve items(5)
このようにすれば、すでに格納されているデータを保持したまま、配列のサイズを変更できます。
配列の要素数を取得する方法
配列のサイズや要素数を確認したいときは、次の関数を使います。
LBound関数とUBound関数
LBound(array)
:配列の最小インデックスを返すUBound(array)
:配列の最大インデックスを返す
Dim nums(1 To 5) As Integer
MsgBox LBound(nums) ' 結果:1
MsgBox UBound(nums) ' 結果:5
配列の要素数を求める式
要素数を求めるには、以下のようにします。
Dim total As Integer
total = UBound(nums) - LBound(nums) + 1
MsgBox total ' 結果:5
このようにすることで、開始インデックスが0や1に関係なく正確な要素数を算出できます。
多次元配列の初期化と要素数の取得
VBAでは1次元だけでなく、2次元やそれ以上の配列も扱えます。
Dim matrix(1 To 3, 1 To 4) As Integer
この場合、3行×4列のデータを格納できます。
要素数を求めるには次のようにします。
Dim rowCount As Integer
Dim colCount As Integer
rowCount = UBound(matrix, 1) - LBound(matrix, 1) + 1
colCount = UBound(matrix, 2) - LBound(matrix, 2) + 1
ここでは、第2引数で「どの次元か」を指定しています。
配列を使ったループ処理の基本
配列とループは相性が良く、以下のように繰り返し処理に使えます。
Dim i As Integer
Dim cities(2) As String
cities(0) = "東京"
cities(1) = "大阪"
cities(2) = "名古屋"
For i = LBound(cities) To UBound(cities)
Debug.Print cities(i)
Next i
このようにすれば、配列のサイズが変更になっても柔軟に対応できます。
Split関数を使った簡易的な配列作成
文字列を区切って配列として扱いたいときには、Split
関数が便利です。
Dim words() As String
words = Split("Apple,Banana,Grape", ",")
この例では、カンマで区切られた文字列が3つの要素を持つ配列に変換されます。
配列の初期化と要素数確認に関する注意点
- VBAの配列は0から始まるのがデフォルトだが、
Option Base 1
で1からスタートに変更可能。 ReDim
で新しいサイズを指定すると、初期化されて既存のデータは消える。Preserve
は最終次元しか変更できない。
Option Base 1
Dim list(3) As Integer
' list(1) から list(3) になる
まとめ
VBAにおける配列の初期化方法と要素数の取得について詳しく見てきました。
配列は非常に便利ですが、使い方を誤るとバグの原因にもなります。今回の内容をしっかり理解し、必要に応じてLBound
やUBound
、ReDim Preserve
などを活用すれば、柔軟かつ安全なコードが書けるようになります。
今後、配列を使って複雑な処理に挑戦したい方は、この基本を押さえておくことが大きな武器になるでしょう。