totn Excel Functions

MS Excel: How to use the FOR...NEXT Statement (VBA)

This Excel tutorial explains how to use the Excel FOR...NEXT statement to create a FOR loop in VBA with syntax and examples.

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.

The FOR...NEXT statement is a built-in function in Excel that is categorized as a Logical Function. It can be used as a VBA function (VBA) in Excel. As a VBA function, you can use this function in macro code that is entered through the Microsoft Visual Basic Editor.

subscribe button Subscribe


If you want to follow along with this tutorial, download the example spreadsheet.

Download Example

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.

Returns

The FOR...NEXT statement creates a FOR loop in VBA.

Note

Applies To

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

Type of Function

  • VBA function (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 As Integer
   Dim 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 As Integer
   Dim LCounter2 As Integer
   Dim 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.

Example#1 from Video

In the first video example, we are going to use the For...Next statement to loop through the products in column A and update the appropriate application type in column B.

Sub totn_for_loop_example1()

   Dim LCounter As Integer

   For LCounter = 2 To 4
      If Cells(LCounter, 1).Value = "Excel" Then
         Cells(LCounter, 2).Value = "Spreadsheet"

      ElseIf Cells(LCounter, 1).Value = "Access" Then
         Cells(LCounter, 2).Value = "Database"

      ElseIf Cells(LCounter, 1).Value = "Word" Then
         Cells(LCounter, 2).Value = "Word Processor"

      End If
   Next LCounter

End Sub

Example#2 from Video

In the second video example, we have a list of participants in column A and we'll use two FOR Loops to assign each of the participants to either Team A or Team B (alternating between the two).

Sub totn_for_loop_example2()

   Dim LCounter1 As Integer
   Dim LCounter2 As Integer

   For LCounter1 = 2 To 9 Step 2
      Cells(LCounter1, 2).Value = "Team A"
   Next LCounter1

   For LCounter2 = 3 To 9 Step 2
      Cells(LCounter2, 2).Value = "Team B"
   Next LCounter2

End Sub