こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、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だからこそ、繰り返し処理はよく使います。どれも使い方は簡単なので、ぜひ使ってみてくださいね!