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

For Each ステートメントとは

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

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

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

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

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

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

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の名前をメッセージボックス表示させているので
    For Each ステートメントとは(Excel VBA) → For Each ステートメントとは(Excel VBA) → For Each ステートメントとは(Excel VBA)
    と、順に表示されます。
  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を配列で使用する場合は、バリアント型の配列でなければなりません。For Each ステートメントとは(Excel VBA)
  2. 配列Roomsに「1号室」「2号室」「3号室」を格納します。
  3. 配列Roomsの1つ目から順に、変数Roomに格納されます。
    1回目処理時:Room=1号室
    2回目処理時:Room=2号室
    3回目処理時:Room=3号室
    そのRoomの内容をMsgBoxでメッセージボックス表示させているので
    For Each ステートメントとは(Excel VBA) → For Each ステートメントとは(Excel VBA) → For Each ステートメントとは(Excel VBA)
    と、表示されます。
  4. 配列Roomsにそれ以上要素が存在しないので、ここで For Each の処理は終了します。
■■■スポンサーリンク■■■

【参考】

指定したフォルダ内のファイル名全てを取得(Excel VBA)
変数でよく使われる「buf」「tmp」の意味
Dir関数が取得するファイルの順番
指定したフォルダ内のフォルダ名全てをGetAttrを使って「エラー53 ファイルが見つかりません。」を出さずに取得(Excel VBA)
GetAttr関数とAnd演算子でビット演算の使い方 ファイルやフォルダの属性を取得
フォルダ名だけを取得したい時に出てくる 「.」 と 「..」 とは?
指定したフォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
CreateObject(“Scripting.FileSystemObject”) を使ってサブフォルダを取得
再帰処理とは?フォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
指定したフォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
再帰処理とは?フォルダ内のサブフォルダのフォルダ名を全部取得(Excel VBA)
参照渡し「ByRef」と値渡し「ByVal」の違い(Excel VBA)
ファイルのフルパスからファイル名のみを取得 InStrRev関数(Excel VBA)
指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
FileSystemObjectとは?CreateObject 関数 FolderExists・GetFolderの使い方
FileSystemObject CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止
再帰処理とは?指定したフォルダの全ての階層のフォルダ名・サブフォルダ名・ファイル名を取得(Excel VBA)
ファイルのフルパスからファイル名のみを取得 Split関数(Excel VBA)
Callステートメントとは 引数 括弧()の使い方(Excel VBA)
指定したフォルダ内から「特定の文字を含まないファイル名」を取得(Excel VBA)
ワイルドカードとは。使い方いろいろ。(Excel)
Dir関数の使い方。ファイル名やフォルダ名の取得方法。(Excel VBA)
指定したフォルダのファイル名を取得し、そのファイル名を一括で変換(Excel VBA)
Excel起動時に「コンパイルエラー」。64ビット システムで Declareステートメントに、PtrSafe属性を設定(Excel VBA )
「ファイルを開く」ダイアログボックス から ファイル名を取得(Excel VBA)
「ファイルを開く」ダイアログボックス から 複数 ファイル名を取得(Excel VBA)

■■■スポンサーリンク■■■