For Each ステートメントとは(Excel VBA)

For Each ステートメントは、配列やコレクションの各要素に対して繰り返し処理を行う場合に使用します。

【構文】
Dim 変数 as オブジェクト型(バリアント型変数)
For Each 変数 In オブジェクトコレクション名(配列名)
    ***変数を使った処理***
Next

【コレクションの各要素に対して繰り返し処理を行う場合】

下記例は、For Eachステートメントを使用して、ThisWorkbook Worksheetsコレクションの各要素(Worksheet)を変数Ws に順に格納し、そのシート名をメッセージボックスに表示させています。

↓↓↓ThisWorkbook の Worksheets「Sheet1」「Sheet2」「Sheet3」

Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
    MsgBox Ws.Name
Next Ws
  1. 変数WsをWorksheet型で宣言します。
  2. ThisWorkbookの一番左のWorksheetから順に、変数Wsに格納されます。
    1回目処理時:Ws=Sheet1
    2回目処理時:Ws=Sheet2
    3回目処理時:Ws=Sheet3
    そのWsの名前をメッセージボックス表示させているので
     →  → 
    と、順に表示されます。
  3. Sheet3の右側にシートが存在しないので、ここで For Each の処理は終了します。

【配列に対して繰り返し処理を行う場合】

下記例は、For Eachステートメントを使用して、配列 Rooms の中身を Room に順に格納し、その中身をメッセージボックスに表示させています。

↓↓↓配列 Rooms「1号室」「2号室」「3号室」

1号室 2号室 3号室
Dim Rooms() As Variant
Dim Room As Variant

Rooms = Array("1号室", "2号室", "3号室")

For Each Room In Rooms
    MsgBox Room
Next Room
  1. 配列RoomsをVariant型で宣言します。
    変数RoomVariant型で宣言します。
    For Eachステートメントでは、配列の要素を受ける変数をVariantにしなければいけません。コンパイルエラーが表示されます。
    For Eachを配列で使用する場合は、バリアント型の配列でなければなりません。
  2. 配列Roomsに「1号室」「2号室」「3号室」を格納します。
  3. 配列Roomsの1つ目から順に、変数Roomに格納されます。
    1回目処理時:Room=1号室
    2回目処理時:Room=2号室
    3回目処理時:Room=3号室
    そのRoomの内容をMsgBoxでメッセージボックス表示させているので
     →  → 
    と、表示されます。
  4. 配列Roomsにそれ以上要素が存在しないので、ここで For Each の処理は終了します。

■スポンサーリンク

■ランキングに参加しています。
↓このブログを気に入っていただけましたら、ポチッとお願いします。
にほんブログ村 IT技術ブログへ
にほんブログ村