こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで繰り返し処理をする方法を知っていますか? VBAのプログラミング言語でもそうですが、データ数分処理をループして動かすケースはとても多いです。
そこで今回は、
- VBAで繰り返し処理をするための3つの方法
- For Next、While、For Eachを使ったサンプルコード
- 処理の途中でループ処理を抜ける方法
といった基礎的なことから、応用的な方法まで、徹底的に解説します!
VBAで繰り返し処理する3つの方法
VBAでは、次の3つの方法でループ処理を書くことができます。
- For Nextステートメント
- Whileステートメント
- For Eachステートメント
それぞれ解説します。
For Nextステートメント
最初は、For Nextステートメントです。For Nextステートメントは、繰り返し回数を数値で指定して、実行することができます。
使い方:
For カウンター用の変数 = 初期値 To 最大値
'処理
Next カウンター用の変数
サンプル:
For i = 1 To 5
'処理
Next i
上の例では、「処理」に書いた処理を、5回ループ処理することができます。詳しい使い方は以下でも解説しているので、気になる方は見てみてくださいね!
Whileステートメント
次に、Whileステートメントです。Whileステートメントは、「指定の値に到達するまで処理をループしたい場合」のように、具体的な数値が決まっていないときに使います。
使い方:
While 条件式
'処理
Wend
サンプル:
While i > 5
'処理
Wend
上の例では、変数iが5よりも大きくなるまで処理をループすることができます。変数1が0.1ずつ増えた場合、1ずつ増えた場合など条件によってループ回数が変わってくるのが、For Nextステートメントとの違いですね。詳しい使い方は以下でも解説しているので、気になる方は見てみてくださいね!
For Eachステートメント
次に、For Eachステートメントです。
For Eachステートメントは、配列の要素数やオブジェクトの数など、変数の塊の数分処理をループしたい場合に使います。
使い方:
Dim 要素を受け取る変数名 As Variant
For Each 要素を受け取る変数名 In 配列やコレクションなどのグループ名
'処理
Next 要素を受け取る変数名
サンプル:
Dim intVal As Variant
Dim arrVal() As Variant
arrVal = Array(1, 2, 3, 4, 5)
For Each intVal In arrVal
'処理
Next intVal
上の例では、配列arrValの要素数分処理をループすることができます。詳しい使い方は以下でも解説しているので、気になる方は見てみてくださいね!
サンプルコード
次に、サンプルコードをもとに、具体的な使い方を解説します。配列(arrVal)の要素数分処理をループし、データを合計した値をメッセージで表示するサンプルを、3つの方法で書きました。
For Nextステートメントの場合:
Sub ForNext_Sample()
'初期値をセット
Dim arrVal() As Variant
Dim intTotalVal As Integer
arrVal = Array(1, 2, 3, 4, 5)
intTotalVal = 0
'配列の要素数を取得
Dim intEleCount As Integer
intEleCount = UBound(arrVal)
'iが要素数以上になるまで、合計金額を計算
Dim i As Integer
For i = 0 To intEleCount
intTotalVal = intTotalVal + arrVal(i)
Next i
MsgBox "For Nextステートメントの合計結果:" & intTotalVal
End Sub
実行結果:

Whileステートメントの場合:
Sub While_Sample()
'初期値をセット
Dim arrVal() As Variant
Dim intTotalVal As Integer
arrVal = Array(1, 2, 3, 4, 5)
intTotalVal = 0
'配列の要素数を取得
Dim intEleCount As Integer
intEleCount = UBound(arrVal)
'iが要素数以上になるまで、合計金額を計算
Dim i As Integer: i = 0
While i <= intEleCount
intTotalVal = intTotalVal + arrVal(i)
i = i + 1
Wend
MsgBox "Whileステートメントの合計結果:" & intTotalVal
End Sub
実行結果:

For Eachステートメントの場合:
Sub ForEach_Sample()
'初期値をセット
Dim arrVal() As Variant
Dim intTotalVal As Integer
arrVal = Array(1, 2, 3, 4, 5)
intTotalVal = 0
'合計金額を計算
Dim intVal As Variant
For Each intVal In arrVal
intTotalVal = intTotalVal + intVal
Next intVal
MsgBox "For Eachステートメントの合計結果:" & intTotalVal
End Sub
実行結果:

実行結果は全て同じですが、処理の内容が若干違いますね。このように、3つの方法でループ処理をすることができます。
補足:ループ処理を途中で抜ける方法とは
ここまでループ処理をする方法について解説してきましたが、ループの途中で処理を抜けたいケースもありますよね。GoTo文を使えば、簡単に途中で処理を抜けることができます。
使い方は以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAで繰り返し処理をする3つの方法について解説しました。大規模なデータを扱うことも多いExcelだからこそ、繰り返し処理はよく使います。どれも使い方は簡単なので、ぜひ使ってみてくださいね!






