指定した範囲のセルの先頭から最後のセルまで、同じ処理をしてみたい。
こんな時に使用する便利な仕組みが「For Each ~ Nextt」ステートメントです。
For ~ Next と似てはいますが別物です。
For Each ステートメントは、「対象としたオブジェクトのリスト(セルの範囲など)を指定して、そのリスト内のすべての対象に同じ処理を行う」ということになります。
二つの例で説明します。
◆ 例 その1
Sub セルeach()
Dim Rng ‘①
‘②
For Each Rng In Range(“A1:D8”)
Rng.Value = “Japan” ‘③
Next
End Sub
① Rng を変数として宣言
ここではあえて型を宣言していません(バリアント型)
初心者のうちはこれでもいいです。
書くなら 「Dim Rng As Range」となります。
詳しくは次の例でお話しします。
② セル A1からD8の範囲でセルの数だけ処理を繰り返し行う命令
③ 範囲内の各セルに「Japan」と書き入れる処理内容
結果は

◆ 例 その2

このような「お取引先リスト」があります。
各会社名の後ろに「御中」の記載を入れます。
Sub セル処理()
‘①
Dim Rng As Range
‘②
For Each Rng In Range(“B3:C9”)
‘③
Rng.Value = Rng.Value & “ 御中”
Next
End Sub
① Range型のオブジェクト変数「Rng」を宣言
VBAではセルをRangeオブジェクトとして扱っています。
よってセルを変数に格納するときは、データ型を「Range型オブジェクト変数」にします。
※ オブジェクト型変数については 「VBA オブジェクト変数とSet」でご覧いただけます。
② セル範囲 B3 から C9 まで順番にこのセルの数だけ繰り返し処理を行う命令
③ 右辺のRng.Valueは現在書かれているお取引先名。
「& ”御中” 」で「(お取引先名)御中」となり、これが右辺に代入され、表示される
よって結果は

一見この「For Each ~ Next」はわかりにくい一面があります。
まず処理対象となるリスト、そしてそのリスト内の個々を扱うための変数を準備します。
そのうえで
For Each (変数)in リスト
処理すべき内容
Next
の形式で書くことによって、リスト内の数だけ処理を繰り返すことになります。
この「For Each ~ Next」は、VBAにある程度慣れてきてからの使用で大丈夫です。
ほとんど通常の「For ~ Next」で対応できます。
このステートメントに設定する変数名は、何でもOKです。
勿論、VBAであらかじめ決められている用語(プロパティ名など)は使用できません。
それ以外でしたら、自分でわかりやすい変数名にしておく方がやりやすいです。
回を重ねるごとに、自分なりのルールなりスタイルを持つことをおすすめします。
たとえば Range は 「rng」、Sheet は「sht」のように、自分がすぐにわかるものに決めることです。

