配列に複数のデータを格納した後、それらを順番に処理するにはループ処理が便利です。
ここでは、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
関数:文字列を区切り文字で分割して、配列として取り出す
5. まとめ
- For文:添字を使って順に処理。柔軟な操作が可能。
- For Each文:配列の中身を順に処理。シンプルで直感的。
どちらのループも、配列を扱う上でとてもよく使われます。
処理内容や目的に応じて、適切なループを選んでみてください。
コメント