Excel VBA
The For loop in Excel VBA is a command used to automatically repeat the same process a specified number of times.
For文
For文は、繰り返し作業を行うときに使う特別な命令です。この命令を使うと、同じ作業を何度も自動で行うことができます。例えば、「こんにちは」と10回画面に表示させたい時や、表の各行にデータを入力したい時などに便利です。
ここで、For文の基本的な形を見てみましょう。次のように書きます。
VBA
For i = 1 To 10
' ここに繰り返したい命令を書く
Next i
このコードでは、i という箱(変数)が 1 から 10 まで変わっていきます。i が 1 のとき、2 のとき、...、最後に 10 になるまで、For と Next の間にある命令を繰り返します。i は「カウンター変数」と呼ばれ、繰り返しの度に値が変わる特別な役割を持っています。
例えば、セル A1 から A10 までに 1 から 10 までの数字を入れたい場合、以下のように書きます。
VBA
Sub test()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i
Next i
End Sub
このコードでは、For文を使って、i が 1 のときにセル A1 に 1 を入れ、i が 2 のときにはセル A2 に 2 を入れ...という風に、A10 に 10 を入れるまで繰り返します。Cells(i, 1) は、i行目の 1列目(A列)のセルを指しています。
For文は非常に強力で、複雑な繰り返し処理もシンプルに書くことができます。ただし、繰り返す回数を正しく設定することが大切です。もし繰り返しの回数を間違えると、意図しない結果になることがありますので、使用する際には慎重に設定しましょう。
これで、Excel VBAのFor文についての基本を理解できたでしょうか?For文を使うことで、同じ作業を簡単に何度も行うことができ、作業の効率を大きく向上させることができます。
For Next
Forインデックス = 初期値 To 最終値 のように入力し、改行して Next を入力します。指定した回数だけループします。
インデックス用の変数を宣言します。その値が初期値から最終値になるまで 1 ずつ加算しながらループします。
VBA
Dim i As Integer ' インデックス用の変数
' i が 1 から 3 まで 3 回ループする
For i = 1 To 3
Debug.Print(i) ' 1 2 3
Next
Forインデックス = 初期値 To 最終値 Step 加算値 のように Step を入力して、インデックスの値を加算や減算する値を指定できます。
VBA
Dim i As Integer
' i が 1 から 5 まで 2 ずつ加算する
For i = 1 To 5 Step 2
Debug.Print(i) ' 1 3 5
Next
' i が 3 から 1 まで -1 ずつ減算する
For i = 3 To 1 Step -1
Debug.Print(i) ' 3 2 1
Next
For Nextは配列のループによく使われます。
VBA
Dim list(2) As Integer ' 配列
Dim i As Integer ' インデックス用の変数
For i = LBound(list) To UBound(list) ' 0 To 2
list(i) = i * 10 ' 配列の要素に値を代入する
Next
For i = LBound(list) To UBound(list) ' 0 To 2
Debug.Print(list(i)) ' 0 10 20
Next
For Each
For Each要素 Inコレクション のように入力し、改行して Next を入力します。コレクションのすべての要素をループをループします。
要素用の変数を宣言します。コレクションの要素が順番にその変数に設定され、最後の要素までループします。
VBA
Dim item As Range ' 要素用の変数
' item にセル A1 ~ A3 が順番に代入される
For Each item In Range("A1:A3")
Debug.Print(item.Address) ' $A$1 $A$2 $A$3
Next
VBA
Dim item As Worksheet ' 要素用の変数
' item にシートが順番に代入される
For Each item In Worksheets
Debug.Print(item.Name) ' Sheet1 Sheet2 Sheet3
Next
Range や Worksheets のように複数の要素を持っているものを「コレクション」と言います。
配列はコレクションではありませんがループできます。そのときは要素の型を Variant 型にします。
VBA
Dim list(2) As Integer ' 配列
list(0) = 0
list(1) = 1
list(2) = 2
Dim item As Variant ' Variant 型にする
For Each item In list
Debug.Print(item) ' 0 1 2
Next
配列の値は取得できても代入はできないので、そのときは For Next で配列をループします。
Forを抜ける
Exit For を入力して、すべての種類の For を抜けられます。
VBA
Dim i As Integer
For i = 1 To 5
If i = 3 Then ' i が 3 になったら
Exit For ' For を抜ける
End If
Debug.Print(i) ' 1 2
Next
' Exit For の後はここから処理が行われる
VBA
Dim w As Worksheet
For Each w In Worksheets
If w.Name = "Sheet3" Then ' シート名が Sheet3 だったら
Exit For ' For を抜ける
End If
Debug.Print(w.Name) ' Sheet1 Sheet2
Next
' Exit For の後はここから処理が行われる
何らかの理由でループを続行できなくなったときや、ループする必要がなくなったときに便利です。
ループをスッキプする(Continue)
ループをスキップして次のループへ移りたいときがあります。他の言語では Continue などでできますが VBA にその機能はありません。そこで GoTo 文を使用して同じことができます。
GoTo Continue のように入力して、ループをスキップできます。
VBA
Dim i As Integer
For i = 1 To 5
If (i Mod 2) = 0 Then ' i が偶数のときはスキップ
GoTo Continue ' Continue: の行へ処理を飛ばす
End If
' ここにループ処理
Debug.Print(i) ' 1 3 5
Continue: ' GoTo Continue の後はここから処理が行われる
Next