For … Nextで指定する変数をどう使うかは、繰り返し処理の内容しだいです。どのような使い方をしてもかまいません。単純に回数を数えるだけの変数としても良いし、せっかく変わってくれる変数なので、今回のようにセルの行を指定するのに使っても良いです。もっと面白い使い方もあるかもしれません。いろいろ考えてみるのも楽しいのではないでしょうか。

(1)For Each … Next

複数のデータがまとまって格納されているグループの中から、順番にデータを取り出すときに使われます。

[リスト3]For Each … Nextの構文

For Each 変数 In グループ
   繰り返す処理(複数行可能)
Next

図14:For Each … Nextフローチャート

グループの場所にはオブジェクトまたは配列の名前を設定します。「オブジェクト、配列」についてはこれから先の応用編で出てきますが、繰り返し処理で使いたいデータが複数、順番に入っているところ、と考えていてください。For Each の処理が始まると、そのデータの最初から順に変数に設定され、データが終了するまで繰り返されます。

データが順番に取り出される。ということを体験してもらうために、表に掃除のチェックシートを作成し、項目を順に取り出してみる例題を作ってみましょう。

図15:For Each … Next例題画面

マクロを実行するとFor Each … Nextで項目のデータを取り込みMsgBoxで表示しています。

[リスト4]ReiForEach(For文Do文例題.xlsm)

Sub ReiForEach()
    c = Cells(3, 3).CurrentRegion.Rows.Count    '(1)
    Range(Cells(3, 3), Cells(c, 3)).Select      '(2)
    For Each a In Selection                     '(3)
        MsgBox (a)
    Next
End Sub

(1)は3行C列のデータが続けて書かれてある最後の行番号を返し、変数cに格納します。「CurrentRegion」は3行C列にあるデータに続けて書かれているデータ領域の範囲を指定するものです。「Rows.Count」は指定された範囲の最後の行番号という意味です。(2)でRange()を使って3行目から最後の行までを選択します。この選択したデータの最初から最後までの内容を(3)で変数aに順番にセットし、MsgBoxでダイアログボックスに表示しています。グループ設定の所に、「Selection」とかいています。現在範囲指定している場所、という意味です。

実際に実行してみると、順にデータが表示されるのを確認できると思います。データを選択し、順にメッセージボックスに表示しています。

<

図16:For Each … Next例題実行画面.1

図16:For Each … Next例題実行画面.2

図16:For Each … Next例題実行画面.3

図16:For Each … Next例題実行画面.4

図16:For Each … Next例題実行画面.5

10行C列のデータまで表示されて終了します。