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列のデータまで表示されて終了します。