プログラミング初心者向けのVBA入門講座第13回です。
→過去の入門講座目次はこちら
前回に引き続き繰り返し処理のステートメントを紹介します。
今回は For Each .. Next ステートメントです。
For Each..Next ステートメントの基本
For Each .. Next ステートメントではコレクションに含まれる全てのオブジェクトに対する処理を実行できます。
基本の書き方は次のようになります。
For Each 変数名 In コレクション
変数を使った処理
Next 変数名
Next の次の変数名は省略可能です。
コレクションに含まれるオブジェクトがひとつずつ変数に格納されていき全てのオブジェクトの数だけ繰り返されます。

コレクションの代わりに配列変数を用いて配列内の要素に対して処理をすることもできます。
実際に使ってみよう
それではFor Each .. Next ステートメントを使ってWorksheetsコレクションからブックに含まれる全てのWorksheetオブジェクトを操作してみましょう。
Worksheetオブジェクトを格納する変数 sh を用意します。
次のマクロを実行するとメッセージボックスでワークシートの名称が順番に全て表示されます。
Sub sample1()
Dim sh As Worksheet
For Each sh In Worksheets
MsgBox sh.Name
Next
End Sub
もうひとつ事例を紹介します。
セルを選択してから次のマクロを実行すると選択範囲のなかで値が50より小さいセルの背景色を赤色にします。
Sub sample2()
Dim rng As Range
For Each rng In Selection
If rng.Value > 50 Then
rng.Interior.ColorIndex = 3
End If
Next
End Sub

ここではSelection プロパティによって選択範囲のセルのRangeオブジェクトコレクションを取得しています。
そのなかの単体のセルのRangeオブジェクトをひとつずつ変数 rng に格納し、If ステートメントを使って値が50より小さいかどうかを判別して処理をしています。
まとめ
いかがでしたか。
前回のFor .. Next ステートメントとあわせて学習し、それぞれ適した状況で使用できるようにしましょう。
コメント