Excel VBA For Each Loop

For Each loop executes a statement or a group of statements for each element in an array or collection. It repeats the statement/condition/code for each element in a collection. For Each Loops loop through every object in an array, such as every worksheet in workbook or every cell in a range.

The “For Each” loop is similar to For Next Loop; however, it is executed for each element in an array or collection. The difference between both of them is that the step counter won't exist in this loop. It is mostly used with collections, arrays or used in the context of the File system objects in order to carry out recursively.

Syntax

For Each element In Group
    [statement 1]
    [statement 2]
    ....
    [statement n] 
    [Exit For]
    [statement n1]
    [statement n2]
 Next 

Example 1: Write a Macro in VBA by using For each loop to print each word of the array in a separate line.

Sub ForEach_Loop_Example1()
    'programming language is an array
    language = Array("VBA", "Java", "C#", "Python")
    Dim languagenames As Variant
    'iterating using For each loop.
    For Each Item In language 
       languagenames = languagenames & Item & Chr(10)
    Next   
    MsgBox language
 End Sub 

Output

VBA For Each Loop

Example 2: Write a procedure or macro using For each that does the following task:

Get "Qualified" in column E if the value of column D is above 200 else it should return “Not Qualified”

Sub ForEach_Loop_Example2()
 Dim rng As Range
 Dim cell As Range
 Set rng = Range("D2:D12")
     'execute a statement or a group of statements for each element
     For Each cell In rng                    'rng is a Range collection and For-Each is moving into each cell of rng collection 
         If cell > 200 Then
             Cells(cell.Row, 5) = "Qualified"
         Else
             Cells(cell.Row, 5) = "Disqualified"       
  End If
     Next
 End Sub 

Output

Name Title Date Sale Amount Qualified/ Not Qualified
Itrat Zaidi IT Manager 6/8/2016 $220.00 Qualified
Varun Mahanty Sales 1/1/2014 $251.00 Qualified
Elmer C. Laslo Customer Service 6/16/2016 $217.00 Qualified
Sohrab Grait Data Entry Specialist 5/31/2015 $344.00 Qualified
Gerard M. Banmiller Customer Service 9/8/2014 $980.00 Qualified
Arvind Patra IT Manager 11/22/2015 $178.00 Disqualified
John C. Black Customer Service 3/31/2014 $258.00 Qualified
N. William White Data Entry Specialist 12/21/2015 $38.00 Disqualified
Robert F. Mangano Data Entry Specialist 7/16/2015 $371.00 Qualified
Rohit Thakkar IT Tech 12/21/2017 $67.00 Disqualified
Thomas E. Vessey Customer Service 1/1/2017 $437.00 Qualified
2

Nested For each Loop

You can nest For Each loop by putting one loop within another. When you nest loops, each loop must have a unique variable.

Example 3: Write a macro or procedure, by using nested for each loop, print the values of one array repeatedly with second array.

'For each repeats the statement/condition/code for each element in a collection
 Sub ForEach_Loop_Example3()
 'initializing the array
 numbers = Array(1, 2, 3)
 letters = Array("a", "b", "c") 
 Dim n As Variant
 Dim Row As Integer, Col As Integer
 Row = 1
 Col = 1
 ' Iterate through the list by using nested loops.
 For Each Item In numbers
     For Each letter In letters
         n = Item & letter & Chr(10) 
         Cells(Row, Col) = n
         Row = Row + 1
     Next
 Next
 End Sub 

Output

1a
 1b
 1c
 2a
 2b
 2c
 3a
 3b
 3c
3

Example 4: Write a macro, to calculate the positive, negative or zero in a sheet.

'For each repeats the
statement/condition/code for each element in a collection
 Sub ForEach_Loop_Example4()
 Dim num As Range
   For Each num In Range("A2:A11")
     If num.Value > 0 Then
       num.Offset(0, 1).Value = "Positive" 
     ElseIf num.Value < 0 Then
       num.Offset(0, 1).Value = "Negative"
     Else
       num.Offset(0, 1).Value = "Zero"
      End If
   Next num
 End Sub 

Output

Number    Positive/Negative
 56    Positive
 0    Zero
 65    Positive
 -98    Negative
 87    Positive
 0    Zero
 -54    Negative
 -9    Negative
 2    Positive
 0    Zero
VBA For Each Loop 4