Skip to content Skip to sidebar Skip to footer

Vba Loop if Column Value 1 Select It Plus Next Rowws of Value 2 Until Value 1 Occurs Again

This postal service provides a consummate guide to the standard VBA For Loop and the VBA For Each Loop.

If you are looking for information about the VBA While and VBA Practice Loop then get here.

If yous want some quick info virtually the For loops then bank check out the Quick Guide tabular array in the section below.

If you are looking for information on a detail topic then cheque out the Table of Contents below.

"History is nearly loops and continuums" – Mike Bidlo.

Contents

  • 1 Related Links for the VBA For Loop
  • two A Quick Guide to the VBA For Loop
  • 3 The VBA For Loop Webinar
  • 4 Introduction to the VBA For Loop
  • 5 What are VBA For Loops?
    • five.1 VBA For Loop Example 1
    • 5.2 The Immediate Window
    • v.iii VBA For Loop Example 2
    • 5.4 VBA For Loop Example three
    • five.5 Advantages of the VBA For Loop
  • vi The Standard VBA For Loop
    • half-dozen.one YouTube Video For Loop
    • 6.two Format of the Standard VBA For Loop
    • vi.3 How a For Loop Works
    • 6.4 Using Pace with the VBA For Loop
    • half dozen.5 Exit the For Loop
    • vi.half-dozen Using the VBA For Loop with a Drove
    • half-dozen.7 Using Nested For Loops
  • 7 The VBA For Each Loop
    • 7.ane Format of the VBA For Each Loop
    • 7.two Order of Items in the For Loop
    • vii.3 Using the VBA For Each Loop With Arrays
    • 7.iv Using Nested For Each Loops
  • 8 How to Loop Through a Range
  • 9 Summary of the VBA For Loops
    • 9.i The Standard VBA For Loop
    • 9.2 The VBA For Each Loop
  • 10 What's Adjacent?

The Complete Guide to Ranges in Excel VBA.
The Complete Guide to Copying Data in Excel VBA.
VBA Practice While Loop.

A Quick Guide to the VBA For Loop

Loop format Clarification Example
For ... Adjacent Run 10 times For i = i To 10
Next
For ... Adjacent Run v times. i=ii,4, 6 etc. For i = 2 To x Step ii
Next
For ... Next Run in reverse club For i = 10 To 1 Step -i
Debug.Print i
Side by side
For ... Side by side Get through Collection For i = 1 To coll.Count
Debug.Print coll(i)
Next
For ... Next Go through array For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Adjacent i
For ... Side by side Go through 2d array For i = LBound(arr) To UBound(arr)
For j = LBound(arr,2) To UBound(arr,2)
Debug.Print arr(i, j)
Next j
Side by side i
For Each ... Side by side Get through Drove Dim item Every bit Variant
For Each item In coll
Debug.Impress item
Next particular
For Each ... Adjacent Go through array Dim detail As Variant
For Each item In arr
Debug.Print item
Next item
For Each ... Next Go through second array Dim item Equally Variant
For Each particular In arr
Debug.Print particular
Next item
For Each ... Next Go through Dictionary Dim cardinal Every bit Variant
For Each key In dict.Keys
Debug.Impress key, dict(primal)
Adjacent key
Both types Go out Loop For i = 1 To ten
If Cells(i,one) = "constitute" Then
Exit For
Finish If
Next i

The VBA For Loop Webinar

If you are a member of the website, click on the image below to view the webinar for this postal service.

(Note: Website members accept admission to the total webinar archive.)

Introduction to the VBA For Loop

Loops are by far the most powerful component of VBA. They are the rocket fuel of your Macros. They can perform tasks in milliseconds that would have humans hours. They also dramatically reduce the lines of code your applications need.

For Loops take been part of all major programming languages since they were offset used with Fortan in 1957.

If yous have never used loops before then this postal service is a great place to offset. It provides an in-depth guide to loops, written in plainly English without the jargon.

Permit'southward outset with a very important question – what are loops and why do we demand them?

What are VBA For Loops?

A loop is simply a way of running the same lines of lawmaking a number of times. Obviously running the aforementioned code over and over would give the same issue.

So what is important to empathise is that the lines of code normally contain a variable that changes slightly each time the loop runs.

For example, a loop could write to cell A1, then prison cell A2, A3 then on. The slight modify each time is the row.

Let's look at a simple case.

VBA For Loop Example one


The following code  prints the values 1 to v in the Firsthand Window(Ctrl + G to view).

          Debug.Print          1          Debug.Print          2          Debug.Print          3          Debug.Print          four          Debug.Print          5        

The Immediate Window

If you take not used the Immediate Window before and so this department will get you up to speed apace.

The role Debug.Print writes values to the Immediate  Window. To view this window select View->Immediate Window from the menu( the shortcut is Ctrl + G)

ImmediateWindow

ImmediateSampeText

VBA For Loop Example 2

At present imagine we want to print out the numbers i to 20. Nosotros would need to add fifteen more than lines to the instance above.

Nonetheless, using a loop we only need to write Debug.Print once.

          For          i = 1          To          20          Debug.Print          i          Adjacent          i        

The output is:

VBA Excel

Output

If we needed print the numbers i to m then we but demand to alter the xx to 1000.

Normally when we write code we would use a variable instead of a number similar twenty or thousand. This gives you greater flexibility. Information technology allows yous to decide the number of times you wish to run the loop when the code is running. The following example explains this.

VBA For Loop Example 3

A common chore in Excel is read all the rows with with information.


The way you approach this task is as follows

  1. Find the last row with data
  2. Shop the value in variable
  3. Use the variable to decide how many times the loop runs

Using a variable in the loop makes your code very flexible. Your volition work no matter how many rows in that location are.

Permit's accept a look at an example. Imagine yous receive a sheet with a list of fruit types and their daily sales. You lot desire to count the number of Oranges sold and this listing volition vary in size depending on sales.

The following screenshot shows an example of this list

Sample Data of Fruit Sales

Sample Data of Fruit Sales

Nosotros can use the code to count the oranges

          ' https://excelmacromastery.com/          Sub          CountFruit()          ' Get the last row with text          Dim          LastRow          As          Long          LastRow = Sheet1.Cells(Sheet1.Rows.Count, one).End(xlUp).Row          Dim          i          Every bit          Long, Full          As          Long          ' Utilize LastRow in loop          For          i = 2          To          LastRow          ' Check if cell has text "Orange"          If          Sheet1.Cells(i, ane).Value =          "Oranges"          Then          ' Add value in column B to full          Total = Total + Sheet1.Cells(i, 2).Value          End          If          Adjacent          i          ' Impress total          Debug.Print          "Total oranges sold was:"; Total          End          Sub        

You can try this code for yourself. Change the number of fruit items and yous will encounter that the code still works fine.

If you were to increase the number fruit items to a large value like x,000 so y'all volition hardly notice the divergence in the time it takes to run – almost instantly.

Loops are super fast. This is what makes them and then powerful. Imagine performing a manual task on 10,000 cells. It would take a considerable amount of time.

Advantages of the VBA For Loop

4To conclude this section we will listing the major advantages of using loops

  • They reduce the lines code you need
  • They are flexible
  • They are fast

In the next sections we will wait at the different types of loops and how to use them.

The Standard VBA For Loop

The VBA For loop is the nearly common loop you will use in Excel VBA. The For Loop is used when you tin can determine the number of times it will be run. For case, if you lot want to echo something twenty times.

YouTube Video For Loop

Check out this YouTube Video of the For Loop:

Go the workbook and code for this video hither

Format of the Standard VBA For Loop

The Standard VBA For Loop has the following format:

For <variable> = <start value> to <terminate value>
Next <variable>

The get-go and end values can be variables. Likewise the variable later on Next is optional but it is useful and it makes it clear which for loop information technology belongs to.

How a For Loop Works

Permit'due south await at a simple for loop that prints the numbers 1 to iii

          Dim          i          As          Long          For          i = ane          To          3          Debug.Print          i          Side by side          i        

How this code works is every bit follows

i is fix to i
The value of i(now one) is printed


i is set to 2
The value of i(now 2) is printed


i is set to 3
The value of i(now 3) is printed

If nosotros did non use a loop so the equivalent code would be

          Dim          i          As          Long          i = i + 1          Debug.Impress          i     i = i + 1          Debug.Print          i     i = i + one          Debug.Print          i        

The i = i + ane line is used to add one to i and is a mutual way in programming to update a counter.

Using Pace with the VBA For Loop

Y'all can see that i is increased by ane each fourth dimension. This is the default. Yous can specify this interval using Step keyword.

The next case shows you how to do this:

          ' Prints the even numbers i.e. two,iv,6,viii ... xx          For          i = two          To          20          Stride          two          Debug.Impress          i          Next          i        

You tin can utilise a negative number with Step which will count in reverse

          ' Prints the even numbers in reverse i.east. 20,xviii,16,14 ... 2          For          i = 20          To          2          Step          -2          Debug.Impress          i          Next          i        

Annotation: if Step is positive then your starting number must be lower than you ending number. The following loop volition not run because the starting number xx is greater than x. VBA therefore, thinks it has already reached the target value 10.

          ' Will not run as starting number already greater than 10          For          i = 20          To          ten          Step          1          Debug.Print          i          Adjacent          i        

If Pace is negative and then the start number must exist greater than the end number.

Exit the For Loop

Sometimes you lot may want to leave the loop earlier if a certain status occurs. For case if you read bad data.

You can use Exit For to automatically leave  the loop as shown in the following code

          For          i = 1          To          1000          ' If cell is blank so go out for          If          Cells(i, i) =          ""          So          MsgBox          "Blank Cell institute - Data mistake"          Leave          For          Stop          If          Next          i        

Using the VBA For Loop with a Collection

The For loop can likewise be used to read items in a Collection.

In the following example, we display the name of all the open workbooks

          Dim          i          As          Long          For          i = i          To          Workbooks.Count          Debug.Impress          Workbooks(i).FullName          Adjacent          i        

Using Nested For Loops

Sometimes you lot may want to employ a loop within a loop. An example of this would be where you want to impress the names of the worksheets of each open workbook.

The first loop would go through each workbook. Each time this loop runs it would apply a second loop to go through all the worksheets of that workbook. It is actually much easier to practise than it sounds.

The post-obit code shows how:

          ' https://excelmacromastery.com/          Sub          ListWorksheets()          Dim          i          Equally          Long, j          As          Long          ' Commencement Loop goes through all workbooks          For          i = 1          To          Workbooks.Count          ' 2d loop goes through all the worksheets of workbook(i)          For          j = 1          To          Workbooks(i).Worksheets.Count          Debug.Print          Workbooks(i).Name +          ":"          + Worksheets(j).Name          Next          j          Next          i          Terminate          Sub        

This works every bit follows:


The offset loop sets i to ane


The 2d loop then uses the workbook at 1 to go through the worksheets.


The kickoff loop sets i to 2


The second loop then uses the workbook at 2 to go through the worksheets.


and so on

It the next section we will apply a For Each loop to perform the same job. You will find the For Each version much easier to read.

The VBA For Each Loop

The VBA For Each loop is used to read items from a collection or an array. We can utilize the For Each loop to admission all the open workbooks. This is considering Application.Workbooks is a collection of open up workbooks.

This is a simple example of using the For Each Loop

          Dim          wk          Equally          Workbook          For          Each          wk          In          Workbooks          Debug.Print          wk.FullName          Side by side          wk        

 Format of the VBA For Each Loop

You lot can see the format of the VBA for each loop here(Run across Microsoft For Each Next documentation):
For Each <variable> in <collection>
Next <variable>

To create a For Each loop nosotros need a variable of the same type that the collection holds. In the example here we created a variable of type Workbook.

If the collection has different types of items we tin declare the variable as a variant.

VBA contains a drove called Sheets. This is a collection of sheets of blazon Worksheet(normal) and Chart(when you lot move a chart to exist a full sail). To go through this drove you would declare the variable as a Variant.

The following code uses For Each to print out the name of all the sheets in the electric current workbook

          Dim          sh          Equally          Variant          For          Each          sh          In          ThisWorkbook.Sheets          Debug.Print          sh.Name          Adjacent          sh        

Order of Items in the For Loop

For Each goes through items in one way but.

For instance, if yous go through all the worksheets in a workbook it will always become through from left to right. If you go through a range it volition kickoff at the lowest jail cell e.g. Range("A1:A10") volition return A1,A2,A3 etc.

This means if you desire any other guild then you need to utilise the For loop.

Both loops in the post-obit example volition read the worksheets from left to right:

          ' Both loops read the worksheets from left to right          Dim          wk          As          Worksheet          For          Each          wk          In          ThisWorkbook.Worksheets          Debug.Impress          wk.Name          Next          Dim          i          Every bit          Long          For          i = ane          To          ThisWorkbook.Worksheets.Count          Debug.Impress          ThisWorkbook.Worksheets(i).Name          Next        

As you lot can see the For Each loop is neater to write. However if you want to read the sheets in whatever other order eastward.k. right to left so you have to use the for loop:

          ' Reading the worksheets from correct to left          Dim          i          As          Long          For          i = ThisWorkbook.Worksheets.Count          To          1          Stride          -1          Debug.Impress          ThisWorkbook.Worksheets(i).Proper name          Next        

Using the VBA For Each Loop With Arrays

One affair to keep in my is that the For Each loop is that it is read-simply when yous employ information technology with arrays.

The post-obit example demonstrates this:

          ' https://excelmacromastery.com/          Sub          UseForEach()          ' Create array and add 3 values          Dim          arr()          As          Variant          arr = Array("A",          "B",          "C")          Dim          s          As          Variant          For          Each          s          In          arr          ' Changes what s is referring to - non value of array item          s =          "Z"          Side by side          ' Print items to prove the assortment has remained unchanged          For          Each          s          In          arr          Debug.Impress          south          Next          End          Sub        

In the get-go loop we try to assign s to "Z". When happens is that due south is now referring the cord "Z" and no longer to the item in the array.

In the second loop we print out the array and y'all can come across that none of the values have changed.

When we apply the For Loop nosotros tin can change the assortment item. If we change the previous code to employ the For Loop you it volition change all the array values to "Z"

          ' https://excelmacromastery.com/          Sub          UsingForWithArray()          ' Create array and add three values          Dim          arr()          As          Variant          arr = Array("A",          "B",          "C")          Dim          i          As          Long          For          i = LBound(arr)          To          UBound(arr)          ' Changes value at position to Z          arr(i) =          "Z"          Adjacent          ' Print items to show the array values have change          For          i = LBound(arr)          To          UBound(arr)          Debug.Print          arr(i)          Adjacent          Finish          Sub        

If your Drove is storing Objects the you can modify the items using a For Each loop.

Using Nested For Each Loops

We saw already that you can have a loop inside other loops. Here is the example from above:

          ' https://excelmacromastery.com/          Sub          ListWorksheets()          Dim          i          As          Long, j          As          Long          ' Offset Loop goes through all workbooks          For          i = 1          To          Workbooks.Count          ' 2nd loop goes through all the worksheets of workbook(i)          For          j = 1          To          Workbooks(i).Worksheets.Count          Debug.Print          Workbooks(i).Name +          ":"          + Worksheets(j).Name          Next          j          Next          i          End          Sub        

This time we will utilise the For Each loop to perform the aforementioned job:

          ' https://excelmacromastery.com/          Sub          ReadAllWorksheets()          Dim          wk          As          Workbook, sh          As          Worksheet          ' Read each workbook          For          Each          wk          In          Workbooks          ' Read each worksheet in the wk workbook          For          Each          sh          In          wk.Worksheets          ' Impress workbook name and worksheet name          Debug.Impress          wk.Name +          ": "          + sh.Name          Side by side          sh          Adjacent          wk          Finish          Sub        

As you can see this is a neater way of performing this task than using the For Loop:

This code run equally follows:

  1. Get the starting time Workbook from the Workbooks collection
  2. Go through all the worksheets in this workbook
  3. Print the workbook/worksheet details
  4. Get the next workbooks in the collection
  5. Repeat steps 2 to three
  6. Continue until no more workbooks are left in the collection

How to Loop Through a Range

In Excel VBA, the most common apply of a For Loop is to read through a range.

Imagine we have the data set in the screenshot beneath. Our task is to write code that will read through the data and copy the amounts to the cavalcade J. We are but going to copy amounts that are greater than 200,000.

VBA For Loop Range

The following example shows how nosotros do information technology:

          ' Read through an Excel Range using the VBA For Loop          ' https://excelmacromastery.com/          Sub          ForLoopThroughRange()          ' Get the worksheet          Dim          sh          As          Worksheet          Set          sh = ThisWorkbook.Worksheets("Sheet1")          ' Get the Range          Dim          rg          As          Range          Set          rg = sh.Range("A1").CurrentRegion          ' Delete existing output          sh.Range("J1").CurrentRegion.ClearContents          ' Prepare the offset output row          Dim          row          As          Long          row = one          ' Read through all the rows using the For Loop          Dim          i          Equally          Long          For          i = 2          To          rg.Rows.Count          ' Check if amount is greater than 200000          If          rg.Cells(i, 4).Value > 200000          Then          ' Re-create amount to cavalcade m          sh.Cells(row,          "J").Value = rg.Cells(i, 4).Value          ' Move to next output row          row = row + 1          End          If          Adjacent          i          End          Sub        


This is a very bones example of copying information using Excel VBA. If y'all want a consummate guide to copying data using Excel VBA then cheque out this post

Summary of the VBA For Loops

The Standard VBA For Loop

  • The For  loop is slower than the For  Each loop.
  • The For loop can get through a selection of items e.1000. 5 to 10.
  • The For loop can read items in reverse e.g. ten to one.
  • The For loop is non every bit neat to write as the For Each Loop especially with nested loops.
  • To exit a For loop utilise Exit For.

The VBA For Each Loop

  • The For Each loop is faster than the For loop.
  • The For Each loop goes through all items in the collection\array.
  • The For Each loop tin can get through items in one guild just.
  • The For Each loop is neater to write than a For Loop especially for nested loops.
  • To leave a For Each loop use Exit For.

What's Next?

Free VBA Tutorial If you are new to VBA or y'all want to sharpen your existing VBA skills and so why not try out the The Ultimate VBA Tutorial.

Related Training: Get total access to the Excel VBA preparation webinars.

(NOTE: Planning to build or manage a VBA Awarding? Learn how to build ten Excel VBA applications from scratch.)

loehrsampe1955.blogspot.com

Source: https://excelmacromastery.com/vba-for-loop/

Post a Comment for "Vba Loop if Column Value 1 Select It Plus Next Rowws of Value 2 Until Value 1 Occurs Again"