【VBA】For…Nextで繰り返し処理する方法
更新日:2023/12/01
VBAのFor…Nextステートメントは、カウンタを使用して繰り返し処理をおこないます。
今回はFor…Nextステートメントの解説と、Excelのセル操作での使用例を紹介します。
For…Nextの構文
For…Nextは数値変数をカウンターとして、繰り返し処理をおこないます。
For 数値変数 = 開始値 To 終了値 Step カウンター増加値 ・・・繰り返し処理 Exit For Next 数値変数
Step カウンター増加値 と Exit For 、Next の後の数値変数は省略できます。
Step カウンター増加値 が省略されているときは、カウンター増加値を1として処理されます。
Exit For は、For…Nextの処理を中断するためのキーワードです。
For…Nextは、For内の処理を行う前に数値変数に初期値をセットして、次の判定を行います。
カウンター増加値 | 条件 |
---|---|
0以上(正の値) | 数値変数が終了値以上(終了値 <= 数値変数) |
0より小さい(負の値) | 数値変数が終了値以下(終了値 >= 数値変数) |
真なら処理を終了します。
偽ならFor内の処理を行って、数値変数の更新後に上記の判定をおこない、判定結果が真になるまで繰り返します。
基本的には無限ループしない構造になっています。
ただし、カウンター増加値に0を指定したり、For…Next内で数値変数を値を変更すると無限ループする可能性があります。
無限ループしたら、EscキーまたはCtrl+Breakキーで中断できます。
For…Nextの使用例
次図のような値が入力されているExcelのシートを使って、For…Nextを使用するコード例を紹介します。
正方向の加算
次のコードは、A列の値を10倍した結果をD列にセットしています。
Sub forNextSample1()
Dim i As Long
For i = 1 To 6
Cells(i, 4).Value = Cells(i, 1).Value * 10
Next i
End Sub
実行すると、次のようになります。
Stepの使用
Stepを使用すると、増加間隔を変更できます。
次のコードは、2行ごとにA列の値を10倍した結果をD列にセットしています。
Sub forNextSample2()
Dim i As Long
For i = 1 To 6 Step 2
Cells(i, 4).Value = Cells(i, 1).Value * 10
Next i
End Sub
実行すると、次のようになります。
Step 0の使用
Stepに0を指定すると、任意の値で数値変数を増減できます。
次のコードは、数値変数を2倍しています。
Sub forNextSample3()
Dim i As Long
For i = 1 To 6 Step 0
Cells(i, 4).Value = Cells(i, 1).Value * 10
i = i * 2
Next i
End Sub
実行すると、次のようになります。
ただし、For…Nextは初期値から終了値まで一定の間隔で繰り返すことを目的としています。
Step 0は、その意図からズレてしまうので、あまりおススメできません。
次のような Do…Loop をおススメします。
Sub doLoopSample1()
Dim i As Long
i = 1
Do While i <= 6
Cells(i, 4).Value = Cells(i, 1).Value * 10
i = i * 2
Loop
End Sub
For…Nextの入れ子
For…Nextは入れ子にできます。
入れ子にするときは数値変数を複数用意して、それぞれのFor…Nextに適用します。
Sub forNextSample4()
Dim i As Long
Dim j As Long
For i = 1 To 6
For j = 0 To 2
Cells(i, 4 + j).Value = Cells(i, 1).Value * 10 ^ (j + 1)
Next j
Next i
End Sub
Nextの後の数値変数を省略できますが、記述しておくとForとNextの対応を把握しやすいという利点があります。
コードが長くなると、Nextに対応するForを探すのがとても難しくなります。
Nextの後ろに変数が書いてあれば、一目瞭然です。
記述することをおススメします。
コードを実行すると、次のようになります。
更新日:2023/12/01
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。