初心者向けにていねいに、Array 関数 の使い方を実例付きで噛み砕いて説明します。コード→ポイント→練習問題(解答付き)という流れで進めます。早速いきましょう!
1. まずは感覚 — Array関数で何ができるか
Array 関数は「複数の値を一気にまとめて配列(箱)に入れる」ためのものです。
通常は一つずつ代入するのに対し、Array("A","B","C") と書くだけで OK。Excel VBA ではこの配列を Variant 型の変数に入れて使うのが一般的です。
2. 基本サンプル(最小限・実行例)
Sub Sample1()
Dim fruits As Variant
fruits = Array("りんご", "みかん", "バナナ")
' 先頭要素は 0 番
MsgBox fruits(0) ' => "りんご"
MsgBox fruits(1) ' => "みかん"
End Sub
VBポイント
fruits(0)が最初の要素(VBAの配列は既定で 0から始まる)。fruitsはVariant型の変数で、内部に配列が入っているイメージ。
3. 配列の長さ(要素数)を取得する方法
Dim n As Long
n = UBound(fruits) - LBound(fruits) + 1
VBLBound:配列の最小インデックス(通常 0)UBound:配列の最大インデックス
この2つを使えば要素数が簡単に分かります。
4. ループで中身を順に取り出す(よく使うパターン)
(A) インデックスで回す
Dim i As Long
For i = LBound(fruits) To UBound(fruits)
Debug.Print fruits(i)
Next i
VB(B) For Each で回す(Variant配列なら使える)
Dim v As Variant
For Each v In fruits
Debug.Print v
Next v
VB※For Each は読みやすく便利。ただし配列のインデックスが必要な場合(番号を使いたい時)は (A) を使います。
5. Excel のセルに一気に書き出す例
Sub WriteToSheet()
Dim months As Variant
months = Array("1月", "2月", "3月", "4月")
Dim i As Long
For i = LBound(months) To UBound(months)
' シート1のA列に順番に書く(A1,A2,...)
ThisWorkbook.Worksheets("Sheet1").Range("A1").Offset(i, 0).Value = months(i)
Next i
End Sub
VBポイント:Offset(i, 0) を使うと A1 から下にずらして代入できます。i=0 だと A1、i=1 だと A2 になります。
6. よくある「つまずきポイント」と対処
- 「0から始まる」ことに慣れない
→ VBA は既定で 0ベース。どうしても1ベースで扱いたければモジュールの先頭にOption Base 1を書けますが、プロジェクト全体に影響するので注意。 - 要素数の取得を忘れるとエラー
→For i = LBound(arr) To UBound(arr)の形にすれば安全です。 - 配列に追加・削除をしたい
→Arrayで作った Variant 配列に対して直接要素の追加は面倒です。要素を動的に増やすならReDim Preserveを使うか、Collection/Dictionaryを検討しましょう。
7. 応用:配列を使って簡単なメニュー(例)
Sub MenuExample()
Dim menu As Variant
menu = Array("追加", "削除", "一覧表示")
Dim choice As Long
choice = Application.Match(InputBox("選んでください: 追加/削除/一覧表示"), menu, 0) ' ※Match は1始まりを返すので工夫が必要
' 単純にForで探す方が安全:
Dim i As Long
For i = LBound(menu) To UBound(menu)
If menu(i) = InputBox("選んでください: 追加/削除/一覧表示") Then
MsgBox "選択:" & menu(i) & "(インデックス:" & i & ")"
Exit For
End If
Next i
End Sub
VB※ Application.Match は扱いが微妙なため、配列検索は For で自分で回すのが確実です。
8. 練習問題(手を動かして覚えよう)
問題1:Array を使って ("東京","大阪","福岡","札幌") を作り、A1:A4 に順に書き込むマクロを書いてください。
問題2:数値配列 Array(10,20,30,40) を足し算して合計を MsgBox で表示するマクロを書いてください。
9. 練習問題の模範解答と解説
解答1
Sub Ex1()
Dim prefs As Variant
prefs = Array("東京", "大阪", "福岡", "札幌")
Dim i As Long
For i = LBound(prefs) To UBound(prefs)
ThisWorkbook.Worksheets("Sheet1").Range("A1").Offset(i, 0).Value = prefs(i)
Next i
End Sub
VB解説:Offset(i,0) で A1 から下にずらし、prefs(i) を順に代入しています。
解答2
Sub Ex2()
Dim nums As Variant
nums = Array(10, 20, 30, 40)
Dim i As Long, sum As Long
sum = 0
For i = LBound(nums) To UBound(nums)
sum = sum + nums(i)
Next i
MsgBox "合計は " & sum
End Sub
VB解説:For で各要素を足し合わせています。数値配列でも Variant に入れて問題ありません。
10. ちょっと先のヒント(次に学ぶと便利なこと)
ReDim/ReDim Preserve:実行時に配列のサイズを変更したいときに使います(可変配列)。Split関数:文字列を分割して配列にする(CSV を配列に変換するのに便利)。CollectionやDictionary:要素の追加/削除やキーでの参照が簡単になります。
最後に:初心者向けアドバイス(まとめ)
- まずは小さな配列を作って
Debug.PrintやMsgBoxで中身を確認しながら慣れましょう。 LBound/UBoundを覚えれば配列を安全に扱えます。- 「配列=まとめて扱う箱」だとイメージして、セルへの出力や計算への応用を試すと理解が早く進みます。

