よく使うステートメント

For ~ Next

 VBAでは「For ~ Next」ステートメントを使って、任意の数だけ処理を繰り返すことができます。
この「繰り返し処理」を「ループ処理」とも言います。

このステートメントも使用頻度の極めて高いものです。

いろいろなケースを想定しながら、繰り返し練習してください。

For 変数 = 初期値 To 最終値
 繰り返しの処理
Next 変数

ここに 5個の玩具商品のリストがあります。
それぞれの「品番」として
SS-1, SS-2 ・・SS-5 を自動記入させます。

Sub hinban()

 Dim I As Long  ‘①

 For I = 1 To 5  ‘②
  ‘③
  Cells(I + 2, 2) = “SS-” & I  
 Next I  ‘②

End Sub

① 繰り返しの回数の変数として「 I 」型は数字(Long)とします。
  ※ 「I」でも「i」でも「p」でも構いません。任意です。

② 初期値を 1 、終了値を 5としています。
  つまりFor と Next の間を5回グルグル回る(ループ)ことになります。
  その間に③の処理が 5回繰り返されます。

③ 最初の「I」は 1 です。
  最初の商品のセルの行番号は「3」です。
  Cells(I+2 , 2)となっています。

  よって Cells(1 + 2, 2) = “SS-” & 1 となります(文字列 SS- に数字の1が加わる)。
  つまり Cells(3 , 2) に 品番の「SS-1」 が入ります。
  ※ Cells については 「セルの指定方法」 を参照してください。

  処理後 Next を経て For に戻ります。

  3回、4回と繰り返します。

  5回目は「I」が 5ですので、
  Cells(7 , 2) に SS-5 の品番が書き入れられます。

5回目の処理を終えた後、Next では上の For に戻らず、このループから抜け出ることになるのです。

慣れないうちは難しく感じるかもしれませんが、ゆっくり落ち着いて動きを追ってみてください。

 これが使えるようになると、様々なことに利用できます。
大幅にスキルアップします。

 ここで一つ問題を出します。
ちょっと難しいかもしれませんが考えてみてください。

先ほどの「玩具商品リスト」が下記のように変わりました。

グリーンの欄に品番を SS-1 から SS-5 までを入れます。

Sub hinban()
 Dim I As Long

 For I = 1 To 5
  (繰り返す処理)
 Next I 

End Sub

「繰り返す処理」以外は先ほどと全く同じです。
異なっているのは、品番を書き入れるセルの行番号が 3 ~ 11 の一行置きになっている点です。

この「繰り返す処理」はどのようになるでしょうか。
考えてみてください。

これは一種の「数学」でもあり、「頭の体操」でもあります。

プログラミングを始めると、こういった思考を求められることによく遭遇します。

逃げずにゲームと思って果敢に挑戦してください。
これがプログラミングの面白さの一つでもあります。

この問題の解答(Answer)です。

For ~ Next文 と If文の組み合わせ

ここで この For ~ Next文 の中に 条件処理の If文が一緒になったマクロをやってみましょう。

テストの結果表です。

合計点が 350点以上は「合格」それ以外は「不合格」を判定欄に記載するマクロです。

Sub hantei()
 Dim TL As Long ‘ ①
 Dim I As Long ‘②

For I = 1 To 11 ‘③
 TL = Cells(I+2, 8).Value ‘④

 If TL >= 350 Then ‘⑤
  Cells(I+2, 9).Value = “合格” ‘⑥
 Else ‘⑦
  Cells(I+2, 9).Value = “不合格” ‘⑧
 End If
Next I

① 一人の合計点を入れる変数 データ型は数字
② ループの回数を入れる変数データ型は数字
  ※カウンター変数といいます

③ 11人いますので、1から11までループします。
④ 一人目から合計点を 変数TLに代入します。

⑤ 合計点TLが350点以上の場合(分岐)
⑥ TLが350点以上だから、判定欄に「合格」と書く

⑦ TLが⑤以外、つまり 350点未満の場合
⑧ TLが350点未満だから、判定欄に「不合格」と書く

ここで注意すべきは、判定欄を書き入れるセル番号です。
I が1 から始まっています。

それに対し、判定欄は 3行目からです。
ですから Cells(I+2,8) になります。

このような結果になります。