今回のテーマは繰返し 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
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
Dim 横 As Integer
For 横 = 2 To 4
Cells(4, 横) = Cells(2, 横) * Cells(3, 横)
Next 横
End Sub
::::::::::::::::::::::::::::::::::::::
いかがでしたか?
今回はFor Nextの変数をセルの位置に使いましたが、シート番号等に使えば、グッと使える幅が広がります。
今後の回でも、多用していきますので、徐々に慣れていきましょう。