VBA for Loop, Bruke Loops i VBA i Microsoft Excel

Anonim

I denne artikkelen har vi dekket forskjellige typer løkker som brukes i VBA, og hvordan vi kan bruke dem til å utføre den samme oppgaven på forskjellige måter.

Hvorfor sløyfer?

Looping er en av de kraftigste programmeringsteknikkene som brukes på tvers av mange programmeringsspråk. Looping brukes til å gjenta en kodeblokk for nødvendig antall ganger eller til en gitt tilstand evalueres til sann eller en bestemt verdi er nådd, hvoretter den neste blokkblokken kjøres.

Formålet med en Excel VBA -løkke er å få Excel til å gjenta et stykke kode et bestemt antall ganger. Man kan angi hvor mange ganger en kode må gjentas som et fast tall (f.eks. Gjør dette 10 ganger), eller som en variabel (f.eks. Gjør dette så mange ganger som det er rader med data).

Excel Loops kan konstrueres på forskjellige måter for å passe forskjellige omstendigheter. Ofte kan de samme resultatene oppnås på forskjellige måter som passer dine personlige preferanser.

Det er tre forskjellige typer løkker tilgjengelig i Excel VBA, som er:

1. GJØR TIL Loop

2. GJØR MENS Loop

3. FOR Loop

1. GJØR TIL Loop

DO UNTIL Loop brukes til å gjenta en kodeblokk på ubestemt tid, til den angitte betingelsen er satt til True. Tilstanden kan enten kontrolleres i begynnelsen eller på slutten av løkken. DO UNTIL… LOOP -setningen tester tilstanden i begynnelsen, mens DO… LOOP UNTIL -setningen tester tilstanden på slutten av Loop.

Syntaks for DO TIL… LOOP -setning

Gjør til [Tilstand]

[Kodeblokk som skal gjentas]

Løkke

Syntaks for DO… LOOP UNTIL statement

Gjøre

[Kodeblokk som skal gjentas]

Sløyfe til [Tilstand]

Vi har forklart DO … UNTIL loop med et eksempel. Makroene Loop1 og Loop2 brukes til å beregne gjennomsnittet av tallene i kolonne A og kolonne B ved hjelp av DO… UNTIL -løkken.

Prøvedata er tilstede i området A15: B27. Kolonne A inneholder score fra runde 1 og kolonne B inneholder score fra runde 2. Vi ønsker å beregne gjennomsnitt av poengsum i runde 1 og runde 2 i kolonne C.

I Loop1 -makroen har vi brukt "FormulaR1C1" for å sette inn gjennomsnittlig formel i den aktive cellen. Tilstandserklæring i DO TIL -sløyfen kontrolleres på slutten av løkken.

I Loop2 -makroen har vi brukt "WorksheetFunction.Average" for å sette inn gjennomsnittsverdi i den aktive cellen. Selv i denne makroen kontrolleres tilstandserklæringen på slutten av løkken.

Den eneste forskjellen mellom Loop1 og Loop2 -makroen er at Loop1 setter inn gjennomsnittsformelen, mens Loop2 beregner gjennomsnittet og deretter setter inn gjennomsnittsverdien i den aktive cellen.

2. GJØR MENS Loop

DO WHILE Loop brukes til å gjenta en kodeblokk på ubestemt antall ganger, mens den angitte tilstanden fortsetter å være True og stopper når betingelsen returnerer False. Tilstanden kan enten sjekkes i begynnelsen eller på slutten av løkken. DO WHILE… LOOP -setningen tester tilstanden i begynnelsen, mens DO… LOOP WHILE -setningen tester tilstanden på slutten av løkken. DO… LOOP WHILE -setningen brukes når vi vil at løkken skal kjøre blokkblokken minst én gang før vi sjekker om tilstanden er.

Syntaks for DO WILE… LOOP -setning

Gjør mens [Tilstand]

[Kodeblokk som skal gjentas]

Løkke

Syntaks for DO… LOOP WHILE uttalelse

Gjøre

[Kodeblokk som skal gjentas]

Sløyfe mens [Tilstand]

I dette eksemplet brukes Loop3- og Loop4 -makroer for å beregne gjennomsnitt for verdier i cellene i kolonne A og kolonne B. Begge makroene fungerer på de samme eksempeldataene som brukes av makroene Loop1 og Loop2. Begge bruker DO WHILE -setningen for å gå gjennom området som inneholder dataene.

Den eneste forskjellen mellom Loop3 og Loop4 makroer er at de er forskjellige måter å representere betingelsene for DO WHILE loop.

Ettersom Loop3 og Loop4 makroer bruker samme inngangsdata og til og med utfører de samme funksjonene som Loop1 makro, slik at utgangen som returneres også vil være den samme som for Loop1 makro.

3. FOR sløyfe

For løkken brukes til å gjenta en blokk med et bestemt antall ganger.

Syntaks for FOR loop

For count_variable = startverdi Til sluttverdi

[kodeblokk]

Neste count_variable

Makro Loop5 viser hvordan du bruker FOR loop for å beregne gjennomsnittet. Den bruker også de samme eksempeldataene som brukes av andre makroer. Vi har brukt 15 som startverdi ettersom eksempeldataene starter fra 15th rad. Vi har brukt Range ("A" & Cells.Rows.Count) .End (xlUp) .Row for å finne den siste raden som inneholder data. FOR sløyfe vil gjenta (siste celle-15) antall ganger.

Utdata returnert etter å ha kjørt Loop5 -makroen er den samme som for Loop1 -makroen.

Loop6 -makro er opprettet for å beregne gjennomsnittet, bare hvis den aktive cellen som vil ha gjennomsnittsfunksjonen er tom før du kjører makroen.

Eksempeldata for denne makroen finnes i området E15 til G27.

Vi har brukt DO… LOOP WHILE for å gå gjennom det definerte området. IF -setning brukes til å kontrollere om cellen der funksjonen skal settes inn, inneholder en verdi. Denne makroen vil bare sette inn gjennomsnittlig funksjon i cellen hvis den er tom.

Loop7 -makro brukes også til å beregne gjennomsnittet. Den ser etter verdier i hjelperkolonnen før den vurderer om den skal sløyfes igjen. Den sjekker også om cellereferansen som skal brukes i gjennomsnittsfunksjonen, er tom.

Eksempeldata som brukes for Loop7 -makro er i området J15: M27.

Kolonne M brukes som hjelperkolonne. Denne makroen vil bare sette inn en gjennomsnittlig funksjon hvis en celle i kolonne M ikke er tom. Denne makroen sjekker at en celle skal være tom før en gjennomsnittlig funksjon settes inn i den. Den vil ikke sette inn en gjennomsnittlig funksjon hvis cellen som refereres til i gjennomsnittsfunksjonen er tom.

Følg koden nedenfor

 Alternativ Eksplisitt delløkke1 () 'Beregner gjennomsnitt' Gjør Til -sløyfen vil sløyfe til cellen i den forrige kolonnen i den aktive cellen er tom Område ("C15"). Velg Gjør 'Tilordne gjennomsnittlig funksjon på verdi i cellene i de to påfølgende kolonnene ActiveCell. FormulaR1C1 = "= Gjennomsnitt (RC [-1], RC [-2])" 'Flytter til celle i neste rad ActiveCell.Offset (1, 0) .Velg' Kontroller om verdien i cellen i forrige kolonne er tom 'Gjør til loop vil sløyfe til tilstandserklæringen returnerer True Loop Before IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Velg End Sub Sub Loop2 () 'Beregner gjennomsnitt' Do Through -sløyfen vil løkke til cellen i forrige kolonnen i den aktive cellen er tom 'Denne makroen ligner på makro Loop1, den eneste måten å beregne gjennomsnittet er et annet område ("C15"). Velg Gjør' Worsheet.Average -funksjonen brukes til å beregne gjennomsnittlig ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0) .Velg loop til IsEmpty (ActiveCel l.Offset (0, -1)) Område ("A15"). Velg End Sub Sub Loop3 () 'Beregner gjennomsnitt' Do While -løkken vil kjøres til cellen i den forrige kolonnen i den aktive cellen er tomt Range ("C15") .Velg 'Kontroller om verdien i cellen i forrige kolonne er tom' Do While -sløyfen vil sløyfe til betingelsessetningen er True Do While IsEmpty (ActiveCell.Offset (0, -1)) = False 'Tilordne gjennomsnittlig funksjon på verdi i celler fra forrige to kolonner på rad ActiveCell.FormulaR1C1 = "= Gjennomsnitt (RC [-1], RC [-2])" 'Flytter til celle i neste rad ActiveCell.Offset (1, 0). Velg Loop Range ("A15"). Velg End Sub Sub Loop4 () 'Beregner gjennomsnitt' Do While loop vil kjøre til cellen i den forrige kolonnen i den aktive cellen er tom 'Denne makroen ligner på makro Loop3, den eneste måten å bruke betingelsen på er et annet område ("C15"). Velg Do While Not IsEmpty (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Gjennomsnitt (RC [-1], RC [-2])" ActiveCell.Offset (1, 0) .Velg sløyfeområde (" A15 "). Velg End Sub Sub Loop5 () 'FOR loop repetisjoner for et fast nummen er ganger bestemt av antall rader Dim i, lastcell As Long 'Finner den siste raden som inneholder data i kolonne A lastcell = Range ("A" & Cells.Rows.Count). End (xlUp) .Row Range ("C15 ") .Velg 'i-variabelen er tildelt verdi på 15 når våre eksempeldata begynner fra 15. rad' FOR Loop vil sløyfe x For i = 15 Til lastcell ActiveCell.FormulaR1C1 =" = Gjennomsnitt (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0) .Velg Neste i område (" A15 "). Velg End Sub Sub Loop6 () 'Beregner gjennomsnitt' Gjør til sløyfe vil sløyfe til celle i forrige kolonne i aktiv celle er tom ' Den beregner ikke et gjennomsnitt hvis det allerede er noe i celleområdet ("G15"). Velg Do If IsEmpty (ActiveCell) Deretter ActiveCell.FormulaR1C1 = "= Gjennomsnitt (RC [-1], RC [-2])" Slutt hvis ActiveCell.Offset (1, 0) .Velg loop til IsEmpty (ActiveCell.Offset (0, -1)) Range ("E15"). Velg End Sub Sub Loop7 () 'Do until loop går så lenge det er noe i cellen i neste kolonne 'Det beregner ikke et gjennomsnitt hvis det allerede er noe i det aktive c ell 'Heller ikke hvis det ikke er data i celler som brukes innenfor gjennomsnittlig funksjon (for å unngå #DIV/0 feil). 'Beregner gjennomsnittlig rekkevidde ("L15"). Velg Do If IsEmpty (ActiveCell) Then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Then ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Gjennomsnitt (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0) .Velg loop til IsEmpty (ActiveCell.Offset (0, 1)) Område ("J15"). Velg End Sub 

Hvis du likte denne bloggen, del den med vennene dine på Facebook. Du kan også følge oss på Twitter og Facebook.

Vi vil gjerne høre fra deg, gi oss beskjed om hvordan vi kan forbedre arbeidet vårt og gjøre det bedre for deg. Skriv til oss på e -post