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