「Excel VBAでグループや配列の各要素に対して処理を加えたい」というときにFor Each使うことができます。
すでに作成したグループや配列を後になって変更したりするときにも、For Eachを使えば簡単に処理ができます。
そこで今回は、Excel VBAのFor Eachの使い方にについて解説します。
- For Eachの使い方が知りたい
- グループや配列の各要素に処理を加えたい
For Each 基礎
For Each とは?
配列やコレクションなどのグループに対して、繰り返し処理を加えたいときにFor Eachを使います。
例えば、「グラフ(オブジェクト)を作成した後、すべてのグラフに処理を加えたい」となったときに、For Eachで簡単にすべてのグラフに対して処理を加えることができます。
繰り返し処理には、for文、while文がありますが、配列やコレクションなどのグループに対して処理を加えたい場合は、For Eachを使うことをおすすめします。
繰り返し処理の使い分け
- for
→幅広く使える。
範囲(1~ある値)で繰り返し処理を加えたい - while
→ある状態(条件式がTrue)が続く限り処理を実行し、
ある状態が解除(条件式がFalse)されたら、処理を終了したい - For Each
→配列やコレクションなどのグループに対して処理を加えたい
for文、while文は以下の記事をご参照ください。
xeory_base
ExcelVBA Do Whileによる繰り返し
For Each 使い方
基本的な使い方
For Eachの基本的な使い方は以下の通りです。
Dim 変数 As Variant
For Each 変数 In グループ
処理
Next 変数
配列を操作
実際に配列を操作するコードを見ていきましょう。
Sub test()
Dim arr() As Variant '配列の変数
arr = Array("a", "b", "c") '配列
Dim tmp As Variant 'For Each 変数
Dim str As String '各要素を代入する変数
For Each tmp In arr
str = str & tmp & vbCrLf
Next tmp
MsgBox str
End Sub
●実行結果
セル範囲
実際に指定したセル範囲にセル位置を入力するコードを見ていきましょう。
Sub test()
Dim r As Range '変数を定義
Set r = Range("A1:C3") 'セル範囲を変数に格納
Dim tmp As Range '変数を定義
For Each tmp In r
tmp.Value = tmp.Address 'セル位置をセルに入力
Next tmp
End Sub
●実行結果
Selection 選択範囲
実際に選択した範囲にセル位置を入力するコードを見ていきましょう。
Sub test()
Dim tmp As Range '変数を定義
For Each tmp In Selection
tmp.Value = tmp.Address 'セル位置をセルに入力
Next tmp
End Sub
●実行結果
コレクションを操作
実際にWorkshettsコレクションを使って、ブック内のすべてのシート名を取得するコードを見ていきましょう。
Sub test()
Dim tmp As String
Dim ws As Worksheet
For Each ws In Worksheets
tmp = tmp & ws.Name & vbCrLf
Next ws
MsgBox tmp
End Sub
●実行結果
For Each 入れ子
For Eachの中にFor Eachを入れることを入れ子と言います。
今回は入れ子を使って、すべてのシートのすべての図形のテキストを取得するコードを見ていきましょう。
Sub test()
Dim tmp As String
Dim ws As Worksheet
Dim shp As Shape
For Each ws In Worksheets 'ブック内のすべてのシート
tmp = tmp & "・" & ws.Name & vbCrLf & " " 'シート名を変数に追加
For Each shp In Worksheets(ws.Name).Shapes 'シート内のすべての図形
tmp = tmp & shp.TextFrame.Characters.Text & ", " '図形のテキストを変数に追加
Next shp
tmp = tmp & vbCrLf '改行を変数に追加
Next ws
MsgBox tmp 'メッセージボックスを出力
End Sub
●Excelの状態
シートは以下のように「Sheet1」、「Sheet2」、「Sheet3」があります。
図形は以下のように「図形1」、「図形2」、「図形3」があります。
●実行結果
まとめ
ここまで、Excel VBAのFor Eachの使い方について解説しました。
繰り返し処理は、膨大な時間を削減してくれるので、この機会にぜひお試しください。
- for
→幅広く使える。
範囲(1~ある値)で繰り返し処理を加えたい - while
→ある状態(条件式がTrue)が続く限り処理を実行し、
ある状態が解除(条件式がFalse)されたら、処理を終了したい - For Each
→配列やコレクションなどのグループに対して処理を加えたい
for文、while文は以下の記事をご参照ください。