- 「ループ処理に配列を使いたいけど、うまく書けない…」
- 「ReDimとかPreserveって難しそう…」
- 「そもそも宣言の書き方が分からない!」
そんな悩みも、配列の宣言方法をしっかり理解すれば一発解決!
この記事では、固定長・動的・多次元配列の基本的な宣言方法を初心者にもわかりやすく解説します。
配列の基本宣言を理解しよう
固定長配列:最初に要素数を決めるタイプ
固定長配列は、宣言時に要素数を指定するシンプルな配列です。サイズが決まっている処理にはこちらが最適。
Sub DeclareFixedArray()
Dim scores(0 To 4) As Integer ' 5つの要素を持つ整数型配列
scores(0) = 80
scores(1) = 90
scores(2) = 85
End Sub
このように、Dim 配列名(開始Index To 終了Index)
で宣言します。
特に指定しない場合は0
始まりになります。サイズが固定されていることで、処理速度が速く、管理も簡単です。
動的配列:サイズ可変で柔軟に対応
動的配列は、あとからサイズを決められるのが魅力。ユーザーの入力やデータ件数に合わせて配列サイズを調整できます。
Sub DeclareDynamicArray()
Dim names() As String
ReDim names(3) ' 要素数4(0〜3)
names(0) = "Taro"
names(1) = "Hanako"
End Sub
まずはDim 配列名()
で配列だけ宣言し、あとでReDim
でサイズを指定します。
再定義する場合、中身が消える点には注意!
Sub ExtendArrayPreserve()
Dim nums() As Long
ReDim nums(2)
nums(0) = 1
nums(1) = 2
ReDim Preserve nums(4)
nums(3) = 3
nums(4) = 4
End Sub
ReDim Preserve
を使えば、既存のデータを保持しつつ、配列サイズの拡張が可能です。
ただし、変更できるのは最終次元のみなので、多次元配列では注意しましょう。
多次元配列:行×列のデータ管理に最適
行列形式のデータを扱いたいときは、多次元配列が便利です。表形式の値や座標の管理にもぴったり。
Sub Declare2DArray()
Dim table(1 To 3, 1 To 2) As String
table(1, 1) = "A"
table(1, 2) = "B"
table(2, 1) = "C"
End Sub
このように、Dim 配列名(行の範囲, 列の範囲)
で宣言します。
行と列のインデックスは個別に定義でき、Excelのセルのようにデータを整理できます。
第二部:配列まわりで“気になる”よくある疑問を解消!
「配列の宣言はわかったけど…これってどうなってるの?」 そんなちょっとした疑問、ありませんか?
ここでは、VBAユーザーがよく検索しがちな “気になること” をまとめて解説します!
配列の中身ってどう確認すればいいの?(=デバッグのコツ)
Sub CheckArrayContent()
Dim colors() As String
colors = Split("赤,青,緑", ",")
Dim i As Long
For i = LBound(colors) To UBound(colors)
Debug.Print "colors(" & i & ") = " & colors(i)
Next i
End Sub
✅ Debug.Print
を使えば、イミディエイトウィンドウで配列の中身をサクッと確認可能!
✅ 長い配列なら、メッセージボックスよりこっちが便利です。
宣言した配列が初期化されてるかどうかの判定方法は?
Function IsInitialized(arr As Variant) As Boolean
On Error Resume Next
IsInitialized = IsArray(arr) And Not IsError(LBound(arr))
End Function
✅ VBAでは未初期化の配列にUBound/LBoundするとエラーになる
✅ 上記のように関数化すれば、処理前の安全チェックができます!
固定長配列ってReDimでサイズ変更できないの?
A: できません!
Dim arr(5) As String
ReDim arr(10) ' → コンパイルエラー
✅ サイズ変更が必要な場合は最初から動的配列を選ぶべし!
✅ Dim arr() As String
+ ReDim
で自由に変更できます。
二次元配列のループってどう書けばいいの?
Sub Loop2DArray()
Dim tbl(1 To 3, 1 To 2) As String
Dim i As Long, j As Long
For i = LBound(tbl, 1) To UBound(tbl, 1)
For j = LBound(tbl, 2) To UBound(tbl, 2)
tbl(i, j) = "セル(" & i & "," & j & ")"
Next j
Next i
End Sub
✅ 行列それぞれに LBound/UBound(..., 次元)
を指定!
✅ Excelの表をループ処理する場面では超必須の書き方。
配列の宣言だけして、あとから型を決めることってできる?
A: できません。VBAでは、宣言時に型は必要です。
Dim arr() ' ← エラーにはならないが Variant 型になる
✅ 型を指定しないと自動的に Variant 型になります。
✅ 後から ReDim arr(5) As String
のような型付き再定義は NG!
まとめ:配列宣言を使い分けてVBAの効率をアップ!
配列はVBAの中でも非常に重要なデータ構造。処理の効率化・データの一括管理・柔軟な構造化に欠かせません。
今回のまとめ
- ✅ 固定長配列 → サイズ固定、処理が高速で簡単!
- ✅ 動的配列 → サイズ変更可能で柔軟!ReDimで調整!
- ✅ 多次元配列 → 行×列のデータに強い!
- ✅ よくある疑問(初期化・確認・再定義)もここでスッキリ解消!
正しく宣言を使い分ければ、ループ処理・集計処理・表形式の操作もどんどん楽になりますよ😊
コメント