VBA For Each文のサンプル(Excel/Access)

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つの値のみ表示されます。

関連の記事

VBA For文の使い方(処理を繰り返す)
VBA Do Loop文の使い方(処理を繰り返す)

△上に戻る