VBAのFor Each文で、繰り返し処理を行うサンプルです。
For Each文自体はExcel、Accessとも同じですがセルの指定はExcelのみできます。
目次
サンプル | For Each文とは |
セルに対して範囲で入力する | |
ワークシートを指定しセルに対して範囲で入力する | |
配列の値を取得するサンプル | |
処理を途中で抜ける(Exit For) | |
ループで処理をスキップする(GoTo) |
For Each文とは
For Each 変数 In コレクションや配列 繰り返される箇所 Next |
- 処理を繰り返したいときに使用します。
- コレクションの数や配列の値の数分処理を繰り返します。
- コレクションとはワークシートやセルの範囲などです。
セルに対して範囲で入力する
Sub test1()
Dim r1 As Range
For Each r1 In Range("B2:C5")
r1.Value = "1"
Next
End Sub
4行目は、コレクションとしてセルの範囲を指定しています。
エクセルのシートのB2からC5まで処理が行われます。
上記のコードを実行した結果です。
B2からC5まで1がセットされます。
ワークシートを指定しセルに対して範囲で入力する
Sub test1()
Dim w1 As Worksheet
For Each w1 In Worksheets
If w1.Name = "Sheet2" Then
w1.Range("B2:C5").Value = "1"
End If
Next
End Sub
4行目は、コレクションとしてワークシートを指定しています。
ワークシートの数だけループ処理が行われます。
5行目は、ワークシート名がSheet2のときのみtrueになります。
6行目は、指定したセルの範囲に1をセットしています。
上記のコードを実行した結果です。
Sheet2のB2からC5まで1がセットされます。
配列の値を取得するサンプル
Sub test1()
Dim ar1(2) As String
ar1(0) = "red"
ar1(1) = "yellow"
ar1(2) = "blue"
For Each str1 In ar1
Debug.Print str1 'red yellow blue
Next
End Sub
2~5行目は、配列を生成しています。
7行目は、配列の値の数分処理を繰り返します。
処理を途中で抜ける(Exit For)
Sub test1()
Dim ar1(2) As String
ar1(0) = "red"
ar1(1) = "yellow"
ar1(2) = "blue"
For Each str1 In ar1
If str1 = "yellow" Then
Exit For
End If
Debug.Print str1 'red
Next
End Sub
配列の要素は3つありますが11行目では1つの値しか表示されません。
Exit forはFor Each文のループから抜けます。
ループで処理をスキップする(GoTo)
VBAには他言語にあるcontinueがありません。
そのためGoTo文を使って同じような動きをさせます。
Sub test1()
Dim ar1(2) As String
ar1(0) = "red"
ar1(1) = "yellow"
ar1(2) = "blue"
For Each str1 In ar1
If str1 = "yellow" Then
GoTo CONTINUE
End If
Debug.Print str1 'red blue
CONTINUE:
Next
End Sub
配列の要素は3つありますが11行目では2つの値のみ表示されます。
関連の記事