Den enkleste type loop i Excel VBA-programmering er en For-Next loop. Sløjfingen styres af en tællervariabel, som starter ved én værdi og stopper ved en anden værdi. Udsagnene mellem For-sætningen og Next-sætningen er de udsagn, der bliver gentaget i løkken.
Et For-Next eksempel
Følgende eksempel bruger en For-Next-løkke til at summere de første 1.000 positive tal. Variablen Total starter som nul. Så opstår sløjfen. Variablen Cnt er sløjfetælleren. Den starter som 1 og øges med 1 hver gang gennem løkken. Sløjfen slutter, når Cnt er 1.000.
Dette eksempel har kun én sætning inde i løkken. Denne erklæring tilføjer værdien af Cnt til variablen Total. Når løkken er færdig, viser en MsgBox summen af tallene.
Sub AddNumbers()
Dim Total Som Dobbelt
Dim Cnt As Long
I alt = 0
For Cnt = 1 til 1000
Total = Total + Cnt
Næste Cnt
MsgBox i alt
Slut Sub
Fordi loop-tælleren er en normal variabel, kan du skrive kode for at ændre dens værdi inden for kodeblokken mellem For- og Next-sætningerne. Dette er dog en meget dårlig praksis.
For-Next eksempler med et trin
Du kan bruge en Step-værdi til at springe nogle tællerværdier over i en For-Next-løkke. Her er det forrige eksempel, omskrevet til kun at summere de ulige tal mellem 1 og 1.000:
Sub AddOddNumbers()
Dim Total Som Dobbelt
Dim Cnt As Long
I alt = 0
For Cnt = 1 til 1000 Trin 2
Total = Total + Cnt
Næste Cnt
MsgBox i alt
Slut Sub
Denne gang starter Cnt som 1 og antager derefter værdier på 3, 5, 7 og så videre. Trinværdien bestemmer, hvordan tælleren øges. Bemærk, at den øvre sløjfeværdi (1000) faktisk ikke bruges, fordi den højeste værdi af Cnt vil være 999.
Her er et andet eksempel, der bruger en trinværdi på 3. Denne procedure fungerer med det aktive ark og anvender lysegrå skygger på hver tredje række, fra række 1 til række 100.
Sub ShadeEveryThird Row()
Dim i As Long
For i = 1 til 100 Trin 3
Rækker(i).Interiør.Farve = RGB(200, 200, 200)
Næste i
Slut Sub
Tjek resultatet af at køre denne makro.
Brug af en løkke til at anvende baggrundsskygge på rækker.
Et For-Next eksempel med en Exit For-erklæring
En For-Next-løkke kan også inkludere en eller flere Exit For-sætninger i løkken. Når VBA støder på denne erklæring, afsluttes løkken med det samme.
Følgende eksempel viser Exit For-sætningen. Denne rutine er en funktionsprocedure, beregnet til at blive brugt i en regnearksformel. Funktionen accepterer ét argument (en variabel ved navn Str) og returnerer tegnene til venstre for det første numeriske ciffer. For eksempel, hvis argumentet er "KBR98Z", returnerer funktionen "KBR."
Funktion TextPart(Str)
Dim i As Long
TextPart = ""
For i = 1 til Len(Str)
Hvis IsNumeric(Mid(Str, i, 1)) Så
Afslut for
Andet
TextPart = TextPart & Mid(Str, i, 1)
Afslut Hvis
Næste i
Afslut funktion
For-Next-løkken starter med 1 og slutter med det tal, der repræsenterer antallet af tegn i strengen. Koden bruger VBA's Mid-funktion til at udtrække et enkelt tegn i løkken. Hvis der findes et numerisk tegn, udføres Exit For-sætningen, og løkken slutter for tidligt.
Hvis tegnet ikke er numerisk, føjes det til den returnerede værdi (som er det samme som funktionens navn). Den eneste gang løkken vil undersøge hvert tegn er, hvis strengen bestået, da argumentet ikke indeholder numeriske tegn.
Et indlejret For-Next eksempel
Du kan have et hvilket som helst antal udsagn i løkken og indlejre For-Next-løkker inde i andre For-Next-løkker.
Følgende eksempel bruger en indlejret For-Next-løkke til at indsætte tilfældige tal i et celleområde på 12 rækker for 5 kolonner. Bemærk, at rutinen udfører den indre løkke (løkken med rækketælleren) én gang for hver iteration af den ydre løkke (løkken med Col-tælleren). Med andre ord udfører rutinen sætningen Cells(Row, Col) = Rnd 60 gange.
Disse celler blev fyldt ved at bruge en indlejret For-Next-løkke.
Sub FillRange()
Dim Col As Long
Dim række så længe
For Col = 1 til 5
For række = 1 til 12
Celler(Række, Col) = Rnd
Næste række
Næste Col
Slut Sub
Det næste eksempel bruger indlejrede For-Next-løkker til at initialisere et tredimensionelt array med værdien 100. Denne rutine udfører sætningen i midten af alle løkkerne (tildelingssætningen) 1.000 gange (10 * 10 * 10), hver gang med en anden kombination af værdier 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
Næste k
Næste j
Næste i
' Andre udtalelser kommer her
Slut Sub
Her er et sidste eksempel, der bruger indlejrede For-Next-løkker med en Step-værdi. Denne procedure opretter et skakbræt ved at ændre baggrundsfarven på skiftende celler.
Brug løkker til at skabe et skakternet mønster.
Rækketælleren går fra 1 til 8. En If-Then-konstruktion bestemmer, hvilken indlejret For-Next-struktur, der skal bruges. For rækker med ulige numre begynder Col-tælleren med 2. For lige nummererede rækker begynder Col-tælleren med 1. Begge sløjfer bruger en trinværdi på 2, så alternative celler påvirkes. To yderligere udsagn gør cellerne firkantede (ligesom et rigtigt skakbræt).
Sub MakeCheckerboard()
Dim R så længe, C så længe
For R = 1 til 8
Hvis WorksheetFunction.IsOdd(R) Så
For C = 2 til 8 Trin 2
Celler (R, C). Interiør. Farve = 255
Næste C
Andet
For C = 1 til 8 Trin 2
Celler (R, C). Interiør. Farve = 255
Næste C
Afslut Hvis
Næste R
Rækker(“1:8”). Rækkehøjde = 35
Kolonne(“A:H”). Kolonnebredde = 6,5
Slut Sub