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ステートメントを使用し、繰り返し処理を行うプログラムでした。