Saturday, August 13, 2016

How to use the FOR...NEXT Statement (VBA)

Description

The Microsoft Excel FOR...NEXT statement is used to create a FOR loop so that you can execute VBA code a fixed number of times.

Syntax

The syntax to create a FOR Loop using the FOR...NEXT statement in Microsoft Excel is:
FOR counter = start TO end [Step increment]
   {...statements...}
NEXT [counter];

Parameters or Arguments

counter
The loop counter variable.
start
The starting value for counter.
end
The ending value for counter.
increment
Optional. The value that counter is incremented each pass through the loop. It can be a positive or negative number. If not specified, it will default to an increment of 1 so that each pass through the loop increases counter by 1.
statements
The statements of code to execute each pass through the loop.

Note

Applies To

  • Excel 2016, Excel 2013, Excel 2011 for Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

Type of Function

  • VBA statement (VBA)

Example (as VBA Function)

The FOR...NEXT statement can only be used in VBA code in Microsoft Excel.
Let's look at how to create a FOR loop in Microsoft Excel, starting with a single loop, double loop, and triple loop, and then exploring how to change the value used to increment the counter each pass through the loop.

Single Loop

The simplest implementation of the FOR loop is to use the FOR...NEXT statement to create a single loop. This will allow you to repeat VBA code a fixed number of times.
For example:
Sub Single_Loop_Example

   Dim LCounter As Integer

   For LCounter = 1 to 5
      MsgBox (LCounter)
   Next LCounter

End Sub
In this example, the FOR loop is controlled by the LCounter variable. It would loop 5 times, starting at 1 and ending at 5. Each time within the loop, it would display a message box with the value of the LCounter variable. This code would display 5 message boxes with the following values: 1, 2, 3, 4, and 5.

Single Loop - Changing Increment

By default, the FOR loop will increment its loop counter by 1, but this can be customized. You can use STEP increment to change the value used to increment the counter. The FOR loop can be increment can be either positive or negative values.

Positive Increment

Let's first look at an example of how to increment the counter of a FOR loop by a positive value.
For example:
Sub Increment_Positive_Example

   Dim LCounter As Integer

   For LCounter = 1 to 9 Step 2
      MsgBox LCounter
   Next LCounter

End Sub
In this example, we've used Step 2 in the FOR loop to change the increment to 2. What this means is that the FOR loop would start at 1, increment by 2, and end at 9. The code would display 5 message boxes with the following values: 1, 3, 5, 7, and 9.

Negative Increment

Now, let's look at how to increment the counter of a FOR loop by a negative value.
For example:
Sub Increment_Negative_Example

   Dim LCounter As Integer

   For LCounter = 50 to 30 Step -5
      MsgBox LCounter
   Next LCounter

End Sub
When you increment by a negative value, you need the starting number to be the higher value and the ending number to be the lower value, since the FOR loop will be counting down. So in this example, the FOR loop will start at 50, increment by -5, and end at 30. The code would display 5 message boxes with the following values: 50, 45, 40, 35, and 30.

Double Loop

Next, let's look at an example of how to create a double FOR loop in Microsoft Excel.
For example:
Sub Double_Loop_Example

   Dim LCounter1, LCounter2 As Integer

   For LCounter1 = 1 to 4
      For LCounter2 = 8 to 9
         MsgBox LCounter1 & "-" & LCounter2
      Next LCounter2
   Next LCounter1

End Sub
Here we have 2 FOR loops. The outer FOR loop is controlled by the LCounter1 variable. The inner FOR loop is controlled by the LCounter2 variable.
In this example, the outer FOR loop would loop 4 times (starting at 1 and ending at 4) and the inner FOR loop would loop 2 times (starting at 8 and ending at 9). Within the inner loop, the code would display a message box each time with the value of the LCounter1-LCounter2. So in this example, 8 message boxes would be displayed with the following values: 1-8, 1-9, 2-8, 2-9, 3-8, 3-9, 4-8, and 4-9.

Triple Loop

Next, let's look at an example of how to create a triple FOR loop in Microsoft Excel.
For example:
Sub Triple_Loop_Example

   Dim LCounter1, LCounter2, LCounter3 As Integer

   For LCounter1 = 1 to 2
      For LCounter2 = 5 to 6
         For LCounter3 = 7 to 8
            MsgBox LCounter1 & "-" & LCounter2 & "-" & LCounter3
         Next LCounter3
      Next LCounter2
   Next LCounter1

End Sub
Here we have 3 FOR loops. The outer-most FOR loop is controlled by the LCounter1 variable. The next FOR loop is controlled by the LCounter2 variable. The inner-most FOR loop is controlled by the LCounter3 variable.
In this example, the outer-most FOR loop would loop 2 times (starting at 1 and ending at 2) , the next FOR loop would loop 2 times (starting at 5 and ending at 6), and the inner-most FOR loop would loop 2 times (starting at 7 and ending at 8).
Within the inner-most loop, the code would display a message box each time with the value of the LCounter1-LCounter2-LCounter3. This code would display 8 message boxes with the following values: 1-5-7, 1-5-8, 1-6-7, 1-6-8, 2-5-7, 2-5-8, 2-6-7, and 2-6-8.