本ページには広告が含まれています。

Excel VBA For Each Next(初心者向け16)

Excel VBA For Each Next(初心者向け16)
くるみこ
くるみこ

今回解説する制御構文は前回に引き続きループ処理の For Each…Next です(^^)

は~い! よろしくお願いしますm(_ _)m

繰り返し処理の第2弾ですね。今回もしっかり勉強しま~す(^^)

前回のおさらいはこちらの記事です(^^)/ 下のカードをクリックすれば開きます

くるみこ
くるみこ

前回記事でわかったことは

・For…Nextステートメントについてしっかりと理解できました
・For…Nextの注意点についても知ることが出来ました

【この記事でわかること
・ループ処理「For Each…Next」の使い方がわかります

この記事のサンプルはこのリンク先からダウンロードできます

スポンサーリンク

For Each…Next ステートメント

配列またはコレクションの各要素に対して、ステートメントのループを繰り返します

For Each…Next の構文

For Each…Nextステートメントは、コレクションや配列に対して、一括して同じ処理を繰り返すステートメントです

【構文】
For Each element In group
  [statements]
  [Exit For]
  [statements]
Next [element]
elementには、コレクションや配列の要素を受け取る変数を指定します
groupには、コレクションや配列を指定します

パーツ説明
element必須。 コレクションまたは配列の要素を反復処理するために使用される変数です
コレクションの場合、要素(element)には、バリアント型の変数
汎用オブジェクト変数、または特定のオブジェクト変数のみを指定できます
配列の場合は、element に使用できるのは Variant 変数だけです
group必須。 オブジェクトのコレクションまたは配列の名前です
    (ユーザー定義型の配列を除きます)
statements省略可能。 group の各アイテムに対して実行される 1 つ以上のステートメントです

For Each…Next の動きを解説

・先ほどの構文をわかりやすく書くとこんな感じです(^^)

For Each バリアント型の変数 In オブジェクトのコレクションまたは配列
 ・・・実行する処理・・・
Next

・For…Nextと違い、step指定はできません
変数group 内の最初の要素から group にそれ以上要素がなくなるまでループします
・ループ内のすべてのステートメントが group 内の各要素に対して実行されます
group にそれ以上要素がなくなると、ループは終了し、Next ステートメントの後のステートメントから実行が続けられます
For Each…Next ループを別のループの内部に置くことによって、For Each…Next ループを入れ子に(ネスト)できます。ただし、各ループの element が一意である必要があります

Exit For でループを抜ける

For Each…Next 間のステートメント内で Exit For を使えばループの途中でループを中断して抜けることが出来ます
・通常は、ステートメント内の条件評価(たとえば If…Then )によりそれ以降ループする必要なくなったと判断した場合ループを抜け、Next の直後のステートメントに制御を移します

For Each…Next 使用例(コレクション)

'ForEachNextサンプル
Sub ForEach_Sample1()
    Dim ws As Worksheet
    Dim msg As String
    For Each ws In Worksheets '自ブックのワークシートコレクション
        msg = msg & ws.Name & vbCrLf
    Next ws     'wsは省略可能
    MsgBox msg
End Sub

・WorksheetsコレクションのメンバーWorksheetの数だけループします
・ワークシート名をメッセージボックスに表示します

For Each…Next 使用例(配列、ネスト、Exit For)

'ForEachNextサンプル(配列)
Sub ForEach_Sample2()
    Dim arr1 As Variant
    Dim arr2 As Variant
    Dim i As Variant
    Dim j As Variant
    '配列をセット
    arr1 = Array(1, 2, 3)
    arr2 = Array(10, 20)
    '1つ目のループ
    For Each i In arr1
        '2つ目のループ
        For Each j In arr2
            MsgBox i & "×" & j & "=" & i * j
            If i * j = 30 Then Exit For
        Next j
    Next i
End Sub

・2つの配列にデータをそれぞれデータを入れて、データ数分ループします
1つ目の配列ループの中に、2つ目の配列ループを入れてネスト(入れ子)しています
・メッセージボックスにそれぞれの配列メンバー同士を掛け合わせは結果を表示します
15行目でその結果を評価し「30」だった場合、Exit For でループを抜けます

For Each…Next の注意点

このサンプルでは、Nextステートメントに element を指定しています
Nextステートメントは element を省略しても、指定されているのと同様に継続されます
注意しなければならないのは、Nextステートメントに指定する element を間違って指定するとエラーが発生します。これは、ネストが崩れたために発生するエラーです
・どうしても指定する場合は、ネストを崩さないように指定します


スポンサーリンク

まとめ(おわりに)

くるみこ
くるみこ

今回はここで終了です!
For Each…Next ステートメントは理解できましたか?

はい! For…Nextの方がわかりやすかったけど、なんとか理解できました!
For Each…Nextではカウンターを使わないからかなぁ(^^ゞ

くるみこ
くるみこ

そうですね! For Each…Nextの場合、メンバー数を知りたい場合は group.count でメンバー数をカウントできます。
次回は Do…Loopステートメントです。楽しみに待っていてね(^^)/

まとめと感想など

For Each…Nextステートメントは配列またはコレクションでの使用に適しています
For Each…Nextステートメントの使い方がわかりました

マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロVBA」の記事を継続して書いていきます

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にもご期待ください(^^)/

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

過去記事のサンプルファイルをダウンロードできます

この記事のサンプルはこのリンク先からダウンロードできます

過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください