Den enkleste type sløyfe i Excel VBA programmering er en For-Neste loop. Den looping styres av en teller med variabel, som starter på en verdi og stopper ved en annen verdi. Uttalelsene mellom For regnskapet og Neste utsagn er utsagn som blir gjentatt i loopen.
A For-Next eksempel
Følgende eksempel bruker en For-Neste sløyfe for å oppsummere det første 1000 positive tall. Den totale variable starter som null. Da looping oppstår. Den variable teller er loopen telleren. Det som starter som en og økes med 1 hver gang gjennom løkken. Sløyfen slutter når teller er 1000.
Dette eksemplet har bare en setning inne i løkken. Denne uttalelsen legger verdien av teller til den totale variable. Når sløyfen er ferdig, viser en MsgBox summen av tallene.
Sub AddNumbers () Dim Sum Per Double Dim CNT så lenge Total = 0 For teller = 1 til 1000 Totalt = Total + teller Neste teller MsgBox TotalEnd SubBecause løkken telleren er en normal variabel, kan du skrive kode for å endre verdien i blokken med kode mellom for og neste uttalelser. Dette er imidlertid en veldig dårlig
praksis.
For-Neste eksempler med en Step
Du kan bruke en Step verdi å hoppe over noen mot verdier i et For- Neste loop. Her er forrige eksempel, omskrevet for å oppsummere bare oddetall mellom 1 og 1000:
Sub AddOddNumbers () Dim Sum Per Double Dim teller så lenge Total = 0 For teller = 1 til 1000 Trinn 2 Total = Total + teller Neste teller MsgBox TotalEnd Sub
Denne gang, begynner Cnt ut som ett og tar deretter på verdier på 3, 5, 7, og så videre. Step verdien bestemmer hvordan telleren økes. Legg merke til at den øvre sløyfen verdi (1000) er faktisk ikke brukes fordi den høyeste verdien av teller vil være 999.
Her er et annet eksempel som bruker en Trinn verdi på 3. Denne fremgangsmåten fungerer med det aktive arket og gjelder lys grå skyggelegging til hver tredje rad, fra rad 1 til rad 100.
Sub ShadeEveryThirdRow () Dim i As Long for i = 1 til 100 Trinn 3 rader (i) .Interior.Color = RGB (200, 200, 200) Neste iEnd Sub
Sjekk ut resultatet av å kjøre denne makroen.
ved hjelp av en løkke til å søke bakgrunnsskygge til rader.
A for-Next eksempel med en Exit for Vern
en For- Neste sløyfe kan også inkludere en eller flere Exit For uttalelser i loopen. Når VBA møter denne uttalelsen, avslutter løkken umiddelbart.
Følgende eksempel viser Exit For uttalelse. Denne rutine er en funksjon prosedyre, beregnet på å brukes i en regneark formel. Funksjonen godtar ett argument (en variabel kalt Str) og returnerer tegnene til venstre for den første siffer. For eksempel, hvis argumentet er "KBR98Z," funksjonen returnerer "KBR."
Funksjon TextPart (Str) Dim i As Long TextPart = "" For i = 1 Til Len (Str) Hvis IsNumeric (Mid (Str, i, 1)) Then Exit For Else TextPart = TextPart & Mid (Str, i, 1) End If Neste iEnd Funksjon
For-Neste sløyfe starter med 1 og slutter med nummer som representerer antall tegn i strengen. Koden benytter VBA Mid-funksjonen til å trekke ut et enkelt tegn i sløyfen. Hvis en numerisk karakter blir funnet, blir Exit For uttalelsen henrettet, og løkken slutter for tidlig.
Hvis tegnet ikke er numerisk, det er lagt til den returnerte verdien (som er det samme som funksjon navn) . Den eneste gangen løkken vil undersøke hver karakter er hvis strengen sendes som argument inneholder ingen numeriske tegn.
En nestet For-Neste eksempel
Du kan ha en rekke uttalelser i loopen og hekker for-Next løkker inni andre for-Neste sløyfer.
følgende eksempel bruker en nestet for-Neste sløyfe for å sette inn tilfeldige tall i en 12-rad-by-5-kolonne celleområde. Legg merke til at rutinen utfører indre sløyfe plakater (løkken med Row telleren) én gang for hver iterasjon av ytterste ledd plakater (løkken med Col telleren). Med andre ord, utfører rutine cellene (rad, Col) = Rnd uttalelse 60 ganger.
Disse cellene ble fylt ved å bruke en nestet For-Next loop.Sub FillRange () Dim Col Som Long Dim Row så lang for Col = 1 til 5 for Row = 1 til 12 celler (Row, Col) = Rnd Neste Row Neste ColEnd Sub
det neste eksemplet bruker nøstede for-Neste looper å klargjøre en tre-dimensjonal array med verdien 100. Denne rutinen Utfører uttalelse i midten av alle sløyfene (oppdraget erklæringen) 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 Som 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 jNext jeg er Andre uttalelser gå hereEnd Sub
Her er et siste eksempel som bruker nestet For-Next looper, med en Step verdi. Denne prosedyren skaper et sjakkbrett ved å endre bakgrunnsfargen i vekslende celler.
Bruke loop for å lage et rutemønster.
Row teller løkker fra 1 til 8. If-Then konstruere bestemmer hvilken nestet For-Neste struktur til bruk. For oddetallsrader begynner Col teller med 2. For partallsrader begynner Col teller med 1. Begge sløyfer bruke en Step verdi på 2, så alternative celler påvirkes. Ytterligere to uttalelser gjør cellene square (akkurat som en 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 Cells (R, C) .Interior.Color = 255 Neste C Else For C = 1 til 8 Trinn 2 Cells (R, C) .Interior.Color = 255 Neste C End If Neste R rader ( "1: 8" ) .RowHeight = 35 kolonner (. "A: H") ColumnWidth = 6.5End Sub