Excel VBA | Array 関数

VBA
スポンサーリンク

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 関数は「固定の並び」を作るのに向いている。追加・削除が必要なら、最初は Dim arr() As Variant で空配列を用意して ReDim Preserve を使う方法を検討する。
Dim arr() As Variant
ReDim arr(0)
arr(0) = "A"
ReDim Preserve arr(1)
arr(1) = "B"
VB
  • 数値と文字を混ぜて使う:
    • 対策: Array は混在も可能だが、取り出して計算する場合は型に注意。数値計算前に CLngCDbl で変換する。

練習課題

  • 課題 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: 配列をシートに書き出し → OffsetLen
  • 課題 3: 配列の数値を計算 → 合計 ÷ 要素数

これらを練習すると、「配列を作る → ループで処理する → 結果を出す」という基本パターンが身につきます。


まとめの指針

  • まず Variant に受ける: Dim x As Variant : x = Array(...)
  • 0 始まりを忘れない: 取り出しは x(0) から。
  • UBound で最後まで回す: 配列の大きさに依存しない、安全なループになる。
  • 用途に合わせて使い分け: すぐに並べたいときは Array、サイズ可変なら ReDim Preserve
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました