Excel VBA の Array 関数の基本
配列は「同じ種類のデータを並べて入れる箱」のイメージです。Array 関数を使うと、その箱に複数の値を一気に入れられます。初心者でも短いコードで扱えるのが魅力です。
配列と Array 関数のイメージ
- 配列の役割: たくさんの値を順番に保存し、番号(インデックス)で取り出す。
- Array 関数の利点: 値を一つずつ入れる代わりに、まとめて入れられる。書く量が減る。
- インデックスの開始: VBA の Array 関数は基本的に 0 から番号が始まる(0, 1, 2, …)。
使い方の基本
- 宣言のしかた:
Dim items As Variant
items = Array("リンゴ", "バナナ", "みかん")
VB- 取り出しのしかた:
Debug.Print items(0) ' リンゴ
Debug.Print items(1) ' バナナ
Debug.Print items(2) ' みかん
VB- 型について:
- Array 関数の戻り値は Variant 型の中に「配列」が入ったもの。
- そのため、受け取る変数は Variant にしておくのが安全。
例題 1: メッセージで順番に表示する
ゴール
3 つの都道府県を Array に入れて、順番にメッセージで表示する。
コード
Sub ShowPrefectures()
Dim prefs As Variant
prefs = Array("東京都", "北海道", "愛知県")
Dim i As Long
For i = 0 To UBound(prefs) ' 0 から最後の要素まで
MsgBox prefs(i)
Next i
End Sub
VBポイント
- UBound: 配列の「最後の番号」を返す。配列の長さに合わせて安全にループできる。
- 0 から始まる: i は 0 からスタート。ここで 1 から始めると 1 個目が抜ける。
例題 2: シートに縦に書き出す
ゴール
商品名の一覧を A1 から下に向かって書き出す。
コード
Sub WriteItemsToSheet()
Dim items As Variant
items = Array("ノート", "ペン", "消しゴム", "定規")
Dim i As Long
For i = 0 To UBound(items)
Range("A1").Offset(i, 0).Value = items(i)
Next i
End Sub
VBポイント
- Offset(i, 0): A1 から i 行分下へずらす。i が 0 のときは A1。
- 配列の中身はそのままセルへ代入できる。
よくあるつまずきと対策
- インデックスは 0 始まり:
- 対策: ループは必ず
For i = 0 To UBound(arr)の形にする。
- 対策: ループは必ず
- Variant 以外に入れてエラー:
- 対策: Array の結果は Variant に入れる。
Dim arr As Variantを習慣に。
- 対策: Array の結果は Variant に入れる。
- 配列のサイズを後から変えたい:
- 対策: Array 関数は「固定の並び」を作るのに向いている。追加・削除が必要なら、最初は
Dim arr() As Variantで空配列を用意してReDim Preserveを使う方法を検討する。
- 対策: Array 関数は「固定の並び」を作るのに向いている。追加・削除が必要なら、最初は
Dim arr() As Variant
ReDim arr(0)
arr(0) = "A"
ReDim Preserve arr(1)
arr(1) = "B"
VB- 数値と文字を混ぜて使う:
- 対策: Array は混在も可能だが、取り出して計算する場合は型に注意。数値計算前に
CLngやCDblで変換する。
- 対策: Array は混在も可能だが、取り出して計算する場合は型に注意。数値計算前に
練習課題
- 課題 1:
- 目的: 5 つの好きな食べ物を Array に入れ、Immediate Window(Debug.Print)で全部表示する。
- ヒント:
For i = 0 To UBound(arr)を使う。
- 課題 2:
- 目的: 都道府県リストを B1 から下に書き出し、同じ行の C 列に文字数(Len)を書き込む。
- ヒント:
Range("B1").Offset(i, 0)とLen(arr(i))。
- 課題 3:
- 目的:
Array(10, 20, 30, 40)の平均値を計算してメッセージ表示する。 - ヒント: 合計はループで足し算、平均は合計 ÷ 要素数(
UBound(arr) + 1)。
- 目的:
解答例と解説
課題 1
「5つの好きな食べ物を Array に入れて、Immediate Window(Debug.Print)で全部表示する」
解答例
Sub FavoriteFoods()
Dim foods As Variant
foods = Array("ラーメン", "カレー", "寿司", "ハンバーグ", "アイス")
Dim i As Long
For i = 0 To UBound(foods)
Debug.Print foods(i)
Next i
End Sub
VB解説
Array("ラーメン", "カレー", ...)でまとめて配列を作成。UBound(foods)は配列の最後の番号(ここでは 4)を返す。Debug.Printは「即時ウィンドウ」に出力する命令。実行すると、食べ物が縦に並んで表示される。
👉 ポイント: 配列の要素数が変わっても UBound を使えば安全に最後までループできる。
課題 2
「都道府県リストを B1 から下に書き出し、同じ行の C 列に文字数(Len)を書き込む」
解答例
Sub PrefectureLength()
Dim prefs As Variant
prefs = Array("東京都", "北海道", "愛知県", "大阪府")
Dim i As Long
For i = 0 To UBound(prefs)
Range("B1").Offset(i, 0).Value = prefs(i)
Range("C1").Offset(i, 0).Value = Len(prefs(i))
Next i
End Sub
VB解説
Range("B1").Offset(i, 0)→ B1 から i 行下のセル。Len(prefs(i))→ 文字列の長さを返す関数。- 実行すると、B列に都道府県名、C列に文字数が並ぶ。
👉 ポイント: Offset を使うと「基準セルからのずれ」で指定できるので、ループ処理と相性が良い。
課題 3
「Array(10, 20, 30, 40) の平均値を計算してメッセージ表示する」
解答例
Sub AverageArray()
Dim nums As Variant
nums = Array(10, 20, 30, 40)
Dim i As Long
Dim total As Long
total = 0
For i = 0 To UBound(nums)
total = total + nums(i)
Next i
Dim avg As Double
avg = total / (UBound(nums) + 1)
MsgBox "平均値は " & avg
End Sub
VB解説
total = total + nums(i)で合計を計算。- 要素数は
UBound(nums) + 1(最後の番号 + 1)。 - 平均値を求めて
MsgBoxで表示。
👉 ポイント: 配列の要素数を数えるときは UBound + 1 を忘れない。
まとめ
- 課題 1: 配列をループして表示 →
Debug.Print - 課題 2: 配列をシートに書き出し →
OffsetとLen - 課題 3: 配列の数値を計算 → 合計 ÷ 要素数
これらを練習すると、「配列を作る → ループで処理する → 結果を出す」という基本パターンが身につきます。
まとめの指針
- まず Variant に受ける:
Dim x As Variant : x = Array(...) - 0 始まりを忘れない: 取り出しは
x(0)から。 - UBound で最後まで回す: 配列の大きさに依存しない、安全なループになる。
- 用途に合わせて使い分け: すぐに並べたいときは Array、サイズ可変なら
ReDim Preserve。

