Eachの概要
コレクションや配列の要素を1つずつ処理する VBAの予約語 | ||
Each 概要 Each キーワードは、VBAで わかりやすく説明 配列やコレクションの各要素を順番に取り出すためのキーワード。 |
||
|
Eachを使った基本的なFor Eachループ
以下の例では、配列の各要素を For Each
を使って処理します。
Sub TestForEachArray()
Dim arr As Variant
Dim value As Variant
arr = Array("A", "B", "C", "D")
For Each value In arr
MsgBox "値: " & value
Next value
End Sub
解説:
arr = Array("A", "B", "C", "D")
: 文字列の配列を定義。For Each value In arr
: 配列の各要素を1つずつvalue
に代入し、ループ処理を行う。- メッセージボックスで各値を表示。
コレクションを処理するFor Eachループ
以下の例では、コレクションの各要素を For Each
を使って処理します。
Sub TestForEachCollection()
Dim myCollection As Collection
Dim item As Variant
Set myCollection = New Collection
myCollection.Add "Apple"
myCollection.Add "Banana"
myCollection.Add "Cherry"
For Each item In myCollection
MsgBox "フルーツ: " & item
Next item
End Sub
解説:
Set myCollection = New Collection
: 新しいコレクションを作成。myCollection.Add
: コレクションに要素を追加。For Each item In myCollection
: コレクションの各要素を処理。
Excel VBAでのEachの活用
Excelのセル範囲の各セルを For Each
で処理する例です。
Sub HighlightCells()
Dim cell As Range
For Each cell In Range("A1:A10")
If cell.Value > 50 Then
cell.Interior.Color = RGB(255, 255, 0) ' 背景色を黄色に
End If
Next cell
End Sub
解説:
- セルA1:A10の各セルを1つずつ処理。
- 50より大きい値のセルを黄色に変更。
Eachの注意事項
- 配列を処理する場合はVariant型にする: 配列を扱うには、ループ変数を
Variant
型にする必要がある。 - コレクションの要素を削除するとエラーになる: ループ内で
Remove
するとエラーになる場合がある。 - 配列の要素変更に注意: ループ内で配列の内容を変更すると、期待通りに処理されないことがある。
よくある質問
- Q: For Each と For Next の違いは?
- A: For Each は配列やコレクションの要素を自動的に処理し、For Next はインデックスを使って処理する。
- Q: すべての配列に For Each を使えますか?
- A: 固定配列には使用できず、
Variant
型の配列にする必要がある。 - Q: ループ中に要素を削除するには?
- A: コレクションの要素を削除する場合は、通常の
For
ループを使うか、配列に変換して処理する。
まとめ
- Each は
For Each ... Next
の一部として使われ、配列やコレクションを効率的に処理する。 - 配列を扱う場合は
Variant
型にする必要がある。 - Excel VBAでセル範囲やシェイプを処理するのに便利。
- ループ中の要素変更には注意が必要。