配列のループとの併用例(For、For Each)

配列に複数のデータを格納した後、それらを順番に処理するにはループ処理が便利です。
ここでは、VBAでよく使われる For文 と For Each文 を使った配列の処理方法について紹介します。


1. For文での配列処理

For文は、配列のインデックス(添字)を指定して、順番に処理する基本的な方法です。

使用例:

Dim fruits(1 To 3) As String
Dim i As Integer

fruits(1) = "りんご"
fruits(2) = "バナナ"
fruits(3) = "オレンジ"

For i = 1 To 3
MsgBox fruits(i)
Next i

このように、For文では配列の要素番号を使って明示的に処理します。


2. For Each文での配列処理

For Each文は、配列のすべての要素を自動的に1つずつ取り出して処理します。
添字の指定がいらないので、コードがシンプルになります。

使用例:

Dim fruits(1 To 3) As String
Dim item As Variant

fruits(1) = "りんご"
fruits(2) = "バナナ"
fruits(3) = "オレンジ"

For Each item In fruits
MsgBox item
Next item

For Each は、要素の中身だけを順に処理したいときにとても便利です。
ただし、インデックス(要素番号)を使った操作はできません。


3. どちらを使うべき?

比較項目For文For Each文
添字を使える〇(可能)✕(使えない)
処理のシンプルさ△(やや手間)〇(簡単)
途中でスキップ等〇(細かく制御できる)△(条件によっては不向き)
  • 添字を使って位置を意識する処理 → For文
  • すべての値を一つずつ処理するだけ → For Each文

といったように、目的に応じて使い分けるのがポイントです。


4. 応用:要素数が変わる配列に対するFor文

可変長配列の場合は、LBound と UBound を使って範囲を調べてからループさせます。

Dim fruits() As String
Dim i As Integer

fruits = Split("りんご,バナナ,オレンジ", ",")

For i = LBound(fruits) To UBound(fruits)
MsgBox fruits(i)
Next i

この方法なら、要素数が何個であっても自動でループできます。

🟡Split関数:文字列を区切り文字で分割して、配列として取り出す

🟠LBound関数:配列の最小のインデックス(添字)を返す

🔴UBound関数:配列の最大のインデックス(添字)を返す


5. まとめ

  • For文:添字を使って順に処理。柔軟な操作が可能。
  • For Each文:配列の中身を順に処理。シンプルで直感的。

どちらのループも、配列を扱う上でとてもよく使われます。
処理内容や目的に応じて、適切なループを選んでみてください。

コメント

タイトルとURLをコピーしました