Excel

【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:1 100 A:2 200 A:3 300 A:4 400 A:5 500 A:6 600

正方向の加算

次のコードは、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

実行すると、次のようになります。

D:1 1000 D:2 2000 D:3 3000 D:4 4000 D:5 5000 D:6 6000

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

実行すると、次のようになります。

D:1 1000 D:3 3000 D:5 5000

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

実行すると、次のようになります。

D:1 1000 D:2 2000 D:4 4000

ただし、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の後ろに変数が書いてあれば、一目瞭然です。

記述することをおススメします。

コードを実行すると、次のようになります。

D:1 1000 D:2 2000 D:3 3000 D:4 4000 D:5 5000 D:6 6000 E:1 10000 E:2 20000 E:3 30000 E:4 40000 E:5 50000 E:6 60000 F:1 100000 F:2 200000 F:3 300000 F:4 400000 F:5 500000 F:6 600000

更新日:2023/12/01

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。