Den enkleste typen løkke i Excel VBA-programmering er en For-Next-løkke. Sløyfen styres av en tellervariabel, som starter ved en verdi og stopper ved en annen verdi. Utsagnene mellom For-setningen og Neste-setningen er påstandene som gjentas i løkken.
Et For-Next eksempel
Følgende eksempel bruker en For-Next-løkke for å summere de første 1000 positive tallene. Totalvariabelen starter som null. Deretter oppstår looping. Variabelen Cnt er looptelleren. Den starter som 1 og økes med 1 hver gang gjennom loopen. Sløyfen slutter når Cnt er 1000.
Dette eksemplet har bare ett utsagn inne i loopen. Denne setningen legger til verdien av Cnt til Total-variabelen. Når loopen er ferdig, viser en MsgBox summen av tallene.
Sub AddNumbers()
Dim totalt som dobbel
Dim Cnt As Long
Totalt = 0
For Cnt = 1 til 1000
Totalt = Totalt + Cnt
Neste Cnt
MsgBox totalt
End Sub
Fordi looptelleren er en normal variabel, kan du skrive kode for å endre verdien innenfor kodeblokken mellom For- og Next-setningene. Dette er imidlertid en veldig dårlig praksis.
For-Next eksempler med et trinn
Du kan bruke en trinnverdi for å hoppe over noen tellerverdier i en For-Next-løkke. Her er det forrige eksemplet, omskrevet for å summere bare oddetall mellom 1 og 1000:
Sub AddOddNumbers()
Dim totalt som dobbel
Dim Cnt As Long
Totalt = 0
For Cnt = 1 til 1000 Trinn 2
Totalt = Totalt + Cnt
Neste Cnt
MsgBox totalt
End Sub
Denne gangen starter Cnt som 1 og får deretter verdier på 3, 5, 7 og så videre. Trinnverdien bestemmer hvordan telleren økes. Legg merke til at den øvre sløyfeverdien (1000) faktisk ikke brukes fordi den høyeste verdien av Cnt vil være 999.
Her er et annet eksempel som bruker en trinnverdi på 3. Denne prosedyren fungerer med det aktive arket og bruker lys grå skyggelegging på hver tredje rad, fra rad 1 til rad 100.
Sub ShadeEveryThird Row()
Dim i As Long
For i = 1 til 100 Trinn 3
Rader(i).Interiør.Farge = RGB(200, 200, 200)
Neste i
End Sub
Sjekk resultatet av å kjøre denne makroen.
Bruke en løkke for å bruke bakgrunnsskygge på rader.
Et For-Next-eksempel med en Exit For-setning
En For-Next-løkke kan også inkludere en eller flere Exit For-setninger i loopen. Når VBA møter denne setningen, avsluttes løkken umiddelbart.
Følgende eksempel viser Exit For-setningen. Denne rutinen er en funksjonsprosedyre, beregnet på å brukes i en regnearkformel. Funksjonen godtar ett argument (en variabel kalt Str) og returnerer tegnene til venstre for det første numeriske sifferet. For eksempel, hvis argumentet er "KBR98Z", returnerer funksjonen "KBR."
Funksjon TextPart(Str)
Dim i As Long
TextPart = ""
For i = 1 til Len(Str)
Hvis IsNumeric(Mid(Str, i, 1)) Da
Avslutt for
Ellers
TextPart = TextPart & Mid(Str, i, 1)
Slutt om
Neste i
Avslutt funksjon
For-Next-løkken starter med 1 og slutter med tallet som representerer antall tegn i strengen. Koden bruker VBAs Mid-funksjon for å trekke ut et enkelt tegn i loopen. Hvis et numerisk tegn blir funnet, utføres Exit For-setningen, og løkken avsluttes for tidlig.
Hvis tegnet ikke er numerisk, legges det til den returnerte verdien (som er det samme som funksjonens navn). Den eneste gangen løkken vil undersøke hvert tegn er om strengen passerte da argumentet ikke inneholder numeriske tegn.
Et nestet For-Next-eksempel
Du kan ha et hvilket som helst antall utsagn i løkken og legge For-Next-løkker i andre For-Next-løkker.
Følgende eksempel bruker en nestet For-Next-løkke for å sette inn tilfeldige tall i et celleområde på 12 rader for 5 kolonner. Legg merke til at rutinen utfører den indre løkken (løkken med radtelleren) én gang for hver iterasjon av den ytre sløyfen (løkken med Col-telleren). Med andre ord, rutinen utfører setningen Cells(Row, Col) = Rnd 60 ganger.
Disse cellene ble fylt ved å bruke en nestet For-Next-løkke.
Sub FillRange()
Dim Col As Long
Dim rad så lenge
For Col = 1 til 5
For rad = 1 til 12
Celler(Row, Col) = Rnd
Neste rad
Neste Col
End Sub
Det neste eksemplet bruker nestede For-Next-løkker for å initialisere en tredimensjonal matrise med verdien 100. Denne rutinen utfører setningen midt i alle løkkene (tilordningssetningen) 1000 ganger (10 * 10 * 10), hver gang med en annen kombinasjon av verdier for i, j og k:
Sub NestedLoops()
Dim MyArray(10, 10, 10)
Dim i As Long
Dim j As Long
Dim k As Long
For i = 1 til 10
For j = 1 til 10
For k = 1 til 10
MyArray(i, j, k) = 100
Neste k
Neste j
Neste i
' Andre uttalelser går her
End Sub
Her er et siste eksempel som bruker nestede For-Next-løkker, med en Step-verdi. Denne prosedyren lager et sjakkbrett ved å endre bakgrunnsfargen til vekslende celler.
Bruke løkker for å lage et sjakkbrettmønster.
Radtelleren går fra 1 til 8. En If-Then-konstruksjon bestemmer hvilken nestet For-Next-struktur som skal brukes. For rader med oddetall begynner Col-telleren med 2. For partallsrader begynner Col-telleren med 1. Begge løkkene bruker en trinnverdi på 2, så alternative celler påvirkes. To ekstra utsagn gjør cellene firkantede (akkurat som et ekte sjakkbrett).
Sub MakeCheckerboard()
Dim R As Long, C As Long
For R = 1 til 8
Hvis WorksheetFunction.IsOdd(R) Da
For C = 2 til 8 Trinn 2
Celler (R, C). Interiør. Farge = 255
Neste C
Ellers
For C = 1 til 8 Trinn 2
Celler (R, C). Interiør. Farge = 255
Neste C
Slutt om
Neste R
Rader(“1:8”). Radhøyde = 35
Kolonner(“A:H”). Kolonnebredde = 6,5
End Sub