★For Each...Next ステートメント
 

◎ 指定した範囲や配列の中で繰り返し処理を行います。
指定した範囲の中から該当するデータを検索したりするのに便利です。


 Set 変数名1 = 範囲

  For Each 変数名2 In 変数名1

      繰り返される処理

  Next 変数名2


 例) セルA1からセルE5までのセル範囲の中で、もしセルが空白なら青色に、空白でなかったら赤色に変えなさい。


またまた前回作ったコードを利用して加工しますね。

Sub foreach()

'A1からE5までの範囲でセルが空白なら青色、空白でなかったら赤色に変えます。

Dim 範囲, 要素

Set 範囲 = Range("A1:E5")

For Each 要素 In 範囲

If 要素.Value = Empty Then

要素.Interior.ColorIndex = 5

Else

要素.Interior.ColorIndex = 3

End If

Next 要素

End Sub


さて実行結果はどうでしょうか?
マクロの実行からマクロ「Foreach」を実行して下さいね。


セルA1からE5までの範囲の中でセルが空白のところは青くなりましたね。
そして何か入力されているところは赤くなりましたね。
では解説ですが

Dim
範囲, 要素

変数「範囲」と変数「要素」はバリアント型で宣言をします。

Set 範囲 = Range("A1:E5")

 「Set」はSetステートメントといいます。
このSetステートメントはオブジェクト(ここでは範囲)を変数に代入(置き換え)します。
ここではセルの範囲A1からE5までを変数「範囲」という名前の変数に代入します。

For Each 要素 In 範囲

変数「範囲」(A1からE5の範囲)の中のひとつひとつのセルを「要素」という変数に置き換えて各セルに繰り返し処理をしていきます。さてその処理の内容は、

If 要素.Value = Empty Then
 
ここで出てくる「要素」にはA1,A2,A3・・・と変数「要素」に入っていくのですね。

要素.Interior.ColorIndex = 5

セルが空白であれば青に

Else

要素.Interior.ColorIndex = 3

セルが空白でなければ赤に

End If


Next 要素

このFor...Eachステートメントを利用すると選択範囲内からの該当データを抽出するのに便利です。また検索条件に一致すると繰り返し処理から抜けるようにするには、Exit Forを使います。
こんな感じです。

[トップ][前へ][ステートメント][次へ]