Excel VBA | Array 関数

VBA
スポンサーリンク

初心者向けにていねいに、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から始まる)。
  • fruitsVariant 型の変数で、内部に配列が入っているイメージ。

3. 配列の長さ(要素数)を取得する方法

Dim n As Long
n = UBound(fruits) - LBound(fruits) + 1
VB
  • LBound:配列の最小インデックス(通常 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. 練習問題(手を動かして覚えよう)

問題1Array を使って ("東京","大阪","福岡","札幌") を作り、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 を配列に変換するのに便利)。
  • CollectionDictionary:要素の追加/削除やキーでの参照が簡単になります。

最後に:初心者向けアドバイス(まとめ)

  • まずは小さな配列を作って Debug.PrintMsgBox で中身を確認しながら慣れましょう。
  • LBound / UBound を覚えれば配列を安全に扱えます。
  • 「配列=まとめて扱う箱」だとイメージして、セルへの出力や計算への応用を試すと理解が早く進みます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました