Using a For Each...Next loop to iterate through a collection or array is faster than using an indexed loop. In most cases, using a For Each...Next loop is also more convenient and makes your macro smaller and easier to read and debug.
The following code is slow because it sets the row variable thisRow by calling r.Rows(i) each time through the loop.
Set r = Worksheets(1).Range("a1:a200") For i = 1 To r.Rows.Count Set thisRow = r.Rows(i) If thisRow.Cells(1, 1).Value < 0 Then thisRow.Font.Color = RGB(255, 0, 0) End If Next
The following code is faster and smaller because the For Each...Next loop keeps track of the row count and position.
For Each thisRow In Worksheets(1).Range("a1:a200").Rows If thisRow.Cells(1, 1).Value < 0 Then thisRow.Font.Color = RGB(255, 0, 0) End If Next
For information about object variables, the With statement, and For Each...Next loops, see Chapter 3, "Controlling Program Flow," and Chapter 4, "Objects and Collections."