Excel VBA 繰り返し処理(For…Next ステートメント)

Excel VBAで繰り返し処理

Excel VBA で繰り返し処理を行う方法はいくつかありますが、今回はFor…Nextステートメントを使用する方法を説明します。

For…Nextステートメントは、指定した回数だけ、一連のステートメントを繰り返します。

構文

For [counter] = [start] To [end] [Step step]

 

  [statements] 

 

Next [counter]

内容
counter

必須。

ループ カウンターとして使用する数値変数を指定します。

この変数には、ブール型(Boolean) 、配列は指定できません。

Nextの後ろにある[counter]は同じ変数ですが、省略可能です。

start

必須。

counter の初期値を指定します。

end

必須。

counter の最終値を指定します。

step

省略可能。

ループを繰り返すたびに、counter にstepで指定した値が加算されます。 Step stepを省略すると、ループを繰り返すたびに、counter に 1 が加算されます。

step には正または負のいずれかを指定できます。

stepが0または正の場合、counter<=endの間、ループを繰り返します。

stepが負の場合、counter >= endの間、、ループを繰り返します。

statements

省略可能。

ループ内で実行される一連のステートメントで、For と Next の間に記述します。

ループ内のすべてのステートメントが実行されると、step の値が counterに加算されます。

この時点で、ループ内のステートメントが再び実行されるか、ループを抜け出して Next ステートメントの次のステートメントから実行が継続されます。

使用例1:For…Nextステートメント

A1セルからA10セルに、行番号を設定するプログラムです。

Sub 繰り返し1()
    Dim i As Integer

    For i = 1 To 10
      Cells(i, 1).Value = i
    Next
End Sub

実行結果は以下のようになります。

変数iが、1から10まで、自動的に加算されます。

つまり、以下の処理が実行されています。

    Cells(1, 1).Value = 1

    Cells(2, 1).Value = 2

   :

    Cells(10, 1).Value = 10

使用例2:Stepオプション

Step を使用し、A1セルからA10セルに、1行おきに行番号を設定するプログラムです。

Sub 繰り返し2()
    Dim i As Integer

    For i = 1 To 10 Step 2
      Cells(i, 1).Value = i
    Next
End Sub

実行結果は以下のようになります。

変数iが、1、3、5・・・9まで、2づつ自動的に加算されます。

つまり、以下の処理が実行されています。

    Cells(1, 1).Value = 1

    Cells(3, 1).Value = 3

   :

    Cells(9, 1).Value =9

使用例3:ループのネスト

For…Next ループの内部に別の For…Next ループを入れて、For…Next ループをネストすることができます。

各ループには、counter として一意の変数名を指定します。

Sub 繰り返し3()
    Dim i, j As Integer

    For i = 1 To 5
      For j = 10 To 1 Step -1
        Cells(i, j).Value = i & “,” & j
      Next
    Next
End Sub

実行結果は以下のようになります。

変数iが1のとき、変数jは10、9、8・・・1まで、1づつ自動的に減算されます。

つまり、以下の処理が実行されています。

    Cells(1, 10).Value = 1,10

    Cells(1, 9).Value = 1,9

   :

    Cells(1, 1).Value =1,1

次に変数iが2になり、変数jは10、9、8・・・1まで、1づつ自動的に減算されます。

つまり、以下の処理が実行されています。

    Cells(2, 10).Value = 2,10

    Cells(2, 9).Value = 2,9

   :

    Cells(2, 1).Value =2,1

次に変数iが3になり、変数jは10、9、8・・・1まで、1づつ自動的に減算されます。

つまり、以下の処理が実行されています。

    Cells(3, 10).Value = 3,10

    Cells(3, 9).Value = 3,9

   :

    Cells(3, 1).Value =3,1

次に変数iが4になり、変数jは10、9、8・・・1まで、1づつ自動的に減算されます。

つまり、以下の処理が実行されています。

    Cells(4, 10).Value = 4,10

    Cells(4, 9).Value = 4,9

   :

    Cells(4, 1).Value =4,1

次に変数iが5になり、変数jは10、9、8・・・1まで、1づつ自動的に減算されます。

つまり、以下の処理が実行されています。

    Cells(5, 10).Value = 5,10

    Cells(5, 9).Value = 5,9

   :

    Cells(5, 1).Value =5,1

これで処理が終わります。

使用例4:Exit Forでループを抜ける

For Nextステートメントから強制的に抜け出るには、Exit Forステートメントを使います。

Sub 繰り返し4()
    Dim i As Integer

    For i = 1 To 10
      If Cells(i, 1).Value <> “” Then
        MsgBox “ループを抜けます”
        Exit For
      End If
      Cells(i, 1).Value = i
    Next
End Sub

実行結果は以下のようになります。

10行目まで処理を繰り返したいが、A列に既に値が入っていたら、そこでメッセージボックススを表示し、ループを抜けて処理を終了します。

 

まとめ

For…Nextステートメントは、指定した回数だけ、一連のステートメントを繰り返す処理に使用します。

Excelのセルは、行、列で位置を表すので、セルに対して繰り返し処理を行う場合は、For…Nextステートメントを使用すると便利です。

以上、Excel VBA で、For…Nextステートメントを使用し、繰り返し処理を行うプログラムでした。