今回のテーマは繰返し For ~ Next 文です。
 
変数をセルの位置やワークシートの数、配列などと連動させて、作業を繰り返したい時に使います。
 
 
例えば、変数nを1~10の範囲で+2ずつ動かす (n=1,3,5,7,9) という場合、
 
For n = 1 to 10 Step 2
    ~
Next n
 
と表現できます。
Stepを省略すると、+1ずつ変数が動きます。
 
 
まずはセルの位置と連動させて、縦に動かしてみましょう。
そしてStepを入れて数字を変えたり、色々試してみましょう。
 
 
Sub 繰返し ()
 
  Dim 縦 As Integer
 
  For 縦 = 2 to 10
    Cells(縦,1)=縦
  Next 縦
 
End Sub
 
 
 
 
次に、セルを横方向へ繰返し操作します。
 
 
Sub 繰返し ()
 
  Dim 横 As Integer
 
  For 横 = 1 to 10 Step 3
    Cells(2,横)=横
  Next 横
 
End Sub
 
 
 
いかがですか?
どう入力すると、 どのセルを操作できるか、イメージが出来たでしょうか?
 
 
もし分からなくなったら、変数に一つずつ代入してみてください。
 
For~Nextの間の文が複雑になるほど、この確認の作業も根気が要りますが、 エラーになった時はよくやる工程なので、今のうちに練習して慣れておきましょう。
 
 
 
 
少しレベルアップして、 上記2つを組み合わせると、 2次元で繰返し操作できます。
 
Sub 繰返し ()
 
  Dim 縦 As Integer
  Dim 横 As Integer
 
  For 横= 1 to 10
  For 縦 = 1 to 10
    Cells(縦,横)=縦*横
  Next 縦
  Next 横
 
End Sub
 
 
 
挙動を図で表すと、
 
 
 
 
また、内側と外側のFor ~Nextを入れ替えると挙動が変わります。
 
Sub 繰返し ()
 
  Dim 縦 As Integer
  Dim 横 As Integer
 
  For 縦 = 1 to 10
  For 横=1 to 10
    Cells(縦,横)=縦*横
  Next 横
  Next 縦
 
End Sub
 
 
 
適宜最適な方を使ってください。
この2重ループは高頻度で使う機会があると思いますので、 是非是非マスターしたいところです。
 
 
 
 
 
最後に一つ注意点があります。 
 
たいていの操作は上⇔下、左右、 どの方向でも問題ありませんが、 For〜 Nextの中にDeleteが入っているときは、上←下、 左←右の方向に動かしましょう。 
そうしないと、飛ばしてしまう行列が出てきます。
 
 
例えば、下記の場合、1行目を削除すると2行目が1行目に繰り上がり、変数は+1されるので、奇数行だけ削除されることになります。
 
 
Sub 行削除()

    Dim 縦 As Integer

    For 縦 = 1 To 10
        Rows(縦).Delete
    Next 縦

End Sub
 
 
::::::::::::::::::::::::::::::::::::::
 
例題
 
変数の回で出した例です。 
For ~ Next文を使って解いてみましょう。
 
毎月りんごを買っています。
4月は1個190円のりんごを5個、5月は1個169円のりんごを8個、6月は1個211円のりんごを3個買いました。 
毎月の経費はいくらでしょう? 
 
ただし、りんごの個数と単価は下記のようにあらかじめワークシートに入力されているものとします。
 
 
 
 
::::::::::::::::::::::::::::::::::::::
 
 
回答例
 
Sub 例題()

    Dim 横 As Integer

    For 横 = 2 To 4
        Cells(4, 横) = Cells(2, 横) * Cells(3, 横)
    Next 横

End Sub
 
 
::::::::::::::::::::::::::::::::::::::
 
 
いかがでしたか?
 
今回はFor Nextの変数をセルの位置に使いましたが、シート番号等に使えば、グッと使える幅が広がります。
 
今後の回でも、多用していきますので、徐々に慣れていきましょう。