こんにちは、ユーキです。
今回は、VBAのFor文のいろいろな書き方を紹介します。
VBAの繰り返し処理はDo~Loop、Whileなどありますが、今回はFor文の紹介になります。
For文
基本
1~5まで5回処理を繰り返すFor文になります。ループカウンタに指定した変数i が5になるまで処理を繰り返します。ループカウンタi は1ずつ加算されます。
Dim i As Integer
For i = 1 To 5
Debug.Print i
Next
Toに指定する値はActiveWorkbook.Sheets.Countなどのようなプロパティでもよいですし、コード上にある変数を指定してもOKです。
Dim i As Integer
Dim endCount As Integer
endCount = 10
For i = 1 To endCount ’ここがActiveWorkbook.Sheets.CountでもOK
Debug.Print i
Next
加算値が1以外のFor文
ループカウンタi が2ずつ増やしていく処理の場合、「Step 2」と記載します。
Dim i As Integer
For i = 1 To 10 Step 2
Debug.Print i
Next
負数を指定することも可能です。10から1まで1つずつ減っていく処理は以下のようになります。
Dim i As Integer
For i = 10 To 1 Step -1
Debug.Print i
Next
処理を途中で抜ける
繰り返し処理を途中で抜けるには、Exit Forを使います。合計値が10を超えたら処理を抜ける処理を書いてみます。
Dim i As Integer
Dim sum As Integer
sum = 0
For i = 1 To 10
sum = sum + i
If sum > 10 Then
Debug.Print "処理終了"
Exit For
End If
Debug.Print i
Next
「Goto ラベル」でも可能ですが、Goto文は基本禁じ手と言われます(処理が追いづらくなるため)。そのため、For文を途中で抜ける場合には、Exit Forを使いましょう。
’参考までにGoto文で処理を抜ける場合
Public Sub Test()
Dim i As Integer
Dim sum As Integer
sum = 0
For i = 1 To 10
sum = sum + i
If sum > 10 Then
'Goto文は禁じ手です。
GoTo Ex
End If
Debug.Print i
Next
Exit Sub
Ex:
Debug.Print "処理終了"
End Sub
二重ループ
For文の中でFor文を実行することも可能です。Exit Forは直近のFor文に対してのみ有効となります。
Dim i As Integer
Dim k As Integer
For i = 1 To 3
For k = 1 To 5
Debug.Print i & " * " & k; " = " & i * k
If (i * k) > 5 Then
’ここで抜けるループは直近For文のみ
Exit For
End If
Next
Next</code></pre>
コレクションの繰り返し(For Each)
配列をループさせたい場合、For Each文が使えます。配列の要素はバリアント型の変数で受けます。
Dim arr(5) As Integer
Dim i As Variant
arr(0) = 5
arr(1) = 10
arr(2) = 20
arr(3) = 30
arr(4) = 40
arr(5) = 50
For Each i In arr
Debug.Print i
Next
ブックのシート単位で処理をしたいような場合には、以下ような使い方も可能です。
Dim sh As Variant
For Each sh In ActiveWorkbook.Sheets
Debug.Print sh.Name
Next
まとめ
今回は、VBAのFor文について述べました。
- 基本は1ずつ加算で繰り返す
- 増減の単位を指定することも可能(2ずつ、-1ずつなど)
- 処理の途中で抜けるときは、Exit Forを使う
- コレクション単位でループ処理にはFor Eachが使える
少しでもお役に立てば、幸いです。