VBA til Loop, Brug Loops i VBA i Microsoft Excel

Anonim

I denne artikel har vi dækket forskellige slags sløjfer, der bruges i VBA, og hvordan man kan bruge dem til at udføre den samme opgave på forskellige måder.

Hvorfor loops?

Looping er en af ​​de mest kraftfulde programmeringsteknikker, der bruges på tværs af mange programmeringssprog. Looping bruges til at gentage en kodeblok i det krævede antal gange, eller indtil en given tilstand evalueres til sand eller en bestemt værdi er nået, hvorefter den næste blok blok udføres.

Formålet med en Excel VBA -loop er at få Excel til at gentage et stykke kode et bestemt antal gange. Man kan angive, hvor mange gange en kode skal gentages som et fast tal (f.eks. Gør dette 10 gange) eller som en variabel (f.eks. Gør dette så mange gange, som der er rækker med data).

Excel Loops kan konstrueres på forskellige måder, der passer til forskellige omstændigheder. Ofte kan de samme resultater opnås på forskellige måder, der passer til dine personlige præferencer.

Der er tre forskellige slags loops tilgængelige i Excel VBA, som er:

1. GØR INDTIL Loop

2. GØR MENS Loop

3. FOR Loop

1. GØR INDTIL Loop

DO UNTIL Loop bruges til at gentage en kodeblok på ubestemt tid, indtil den angivne betingelse er sat til True. Tilstanden kan enten kontrolleres i begyndelsen eller i slutningen af ​​sløjfen. DO UNTIL… LOOP -sætningen tester tilstanden i begyndelsen, mens DO… LOOP UNTIL -sætningen tester tilstanden i slutningen af ​​Loop.

Syntaks for DO TIL TIL… LOOP -erklæring

Gør indtil [Tilstand]

[Kodeblok skal gentages]

Sløjfe

Syntaks for DO… LOOP INDTIL erklæring

Gør

[Kodeblok skal gentages]

Sløjfe indtil [tilstand]

Vi har forklaret DO … UNTIL loop med et eksempel. Makroerne Loop1 og Loop2 bruges til at beregne gennemsnittet af tal i kolonne A og kolonne B ved hjælp af DO … UNTIL -løkken.

Prøvedata findes i området A15: B27. Kolonne A indeholder score for runde 1 og kolonne B indeholder score for runde 2. Vi vil beregne gennemsnit af scoringer i runde 1 og runde 2 i kolonne C.

I Loop1 -makroen har vi brugt "FormulaR1C1" til at indsætte gennemsnitsformel i den aktive celle. Tilstandserklæring i DO UNTIL -løkken kontrolleres i slutningen af ​​sløjfen.

I Loop2 -makroen har vi brugt "WorksheetFunction.Average" til at indsætte gennemsnitsværdi i den aktive celle. Selv i denne makro kontrolleres tilstandsopgørelsen i slutningen af ​​sløjfen.

Den eneste forskel mellem Loop1 og Loop2 makro er, at Loop1 indsætter gennemsnitsformlen, hvorimod Loop2 beregner gennemsnittet og derefter indsætter gennemsnitsværdien i den aktive celle.

2. GØR MENS Loop

DO WHILE Loop bruges til at gentage en kodeblok på ubestemt antal gange, mens den angivne betingelse fortsat er True og stopper, når betingelsen returnerer False. Tilstanden kan enten kontrolleres i begyndelsen eller i slutningen af ​​sløjfen. DO WHILE… LOOP -sætningen tester tilstanden i begyndelsen, mens DO… LOOP WHILE -sætningen tester tilstanden for enden af ​​sløjfen. Sætningen DO… LOOP WHILE bruges, når vi vil have loopet til at køre kodeblokken mindst én gang, før vi kontrollerer tilstanden.

Syntaks for DO WILE… LOOP -sætning

Gør mens [Tilstand]

[Kodeblok skal gentages]

Sløjfe

Syntaks for DO… LOOP WHILE -sætning

Gør

[Kodeblok skal gentages]

Sløjfe mens [tilstand]

I dette eksempel bruges Loop3- og Loop4 -makroer til at beregne gennemsnit for værdier i celler i kolonne A og kolonne B. Begge makroer arbejder på de samme eksempeldata som bruges af makroer Loop1 og Loop2. Begge bruger DO WHILE -sætning til at gå gennem området, der indeholder dataene.

Den eneste forskel mellem Loop3 og Loop4 makroer er, at de er forskellige måder at repræsentere betingelser for DO WHILE loop.

Da Loop3- og Loop4 -makroer bruger de samme inputdata og endda udfører de samme funktioner som Loop1 -makroen, så det returnerede output også vil være det samme som for Loop1 -makroen.

3. FOR loop

For Loop bruges til at gentage en blok blok for et bestemt antal gange.

Syntaks for FOR loop

For count_variable = start_værdi Til slutværdi

[kodeblok]

Næste count_variable

Makro Loop5 viser, hvordan man bruger FOR loop til at beregne gennemsnittet. Det bruger også de samme eksempeldata, der bruges af andre makroer. Vi har brugt 15 som startværdi, da eksempeldataene starter fra 15th række. Vi har brugt Range ("A" & Cells.Rows.Count) .End (xlUp) .Række for at finde den sidste række, der indeholder data. FOR loop vil gentage (sidste celle-15) antal gange.

Output returneret efter at have kørt Loop5 -makroen er det samme som for Loop1 -makroen.

Loop6 -makro oprettes for at beregne gennemsnittet, kun hvis den aktive celle, der vil have gennemsnitsfunktionen, er tom, før makroen køres.

Prøvedata for denne makro findes i området E15 til G27.

Vi har brugt DO… LOOP WHILE til at gå gennem det definerede område. IF -sætning bruges til at kontrollere, om cellen, hvor funktionen indsættes, indeholder en værdi. Denne makro vil kun indsætte gennemsnitsfunktionen i cellen, hvis den er tom.

Loop7 -makro bruges også til at beregne gennemsnit. Det kontrollerer værdier i hjælperkolonnen, før det vurderes, om der skal loopes igen. Det kontrollerer også, om cellereferencen, der skal bruges i gennemsnitsfunktionen, er tom.

Prøvedata, der bruges til Loop7 -makroen, ligger i området J15: M27.

Kolonne M bruges som hjælperkolonne. Denne makro vil kun indsætte en gennemsnitlig funktion, hvis en celle i kolonne M ikke er tom. Denne makro kontrollerer, at en celle skal være tom, før en gennemsnitlig funktion indsættes i den. Det vil ikke indsætte en gennemsnitlig funktion, hvis cellen, der refereres til i gennemsnitsfunktionen, er tom.

Følg venligst nedenstående for koden

 Valgmulighed Eksplicit sub -loop1 () 'Beregning af gennemsnit' Do Till -loop vil løbe, indtil cellen i den forrige kolonne i den aktive celle er tom. Område ("C15"). Vælg Do "Tildeling af gennemsnitsfunktion på værdi i celler i de to foregående kolonner i træk ActiveCell. FormulaR1C1 = "= Gennemsnit (RC [-1], RC [-2])" 'Flytter til celle i næste række ActiveCell.Offset (1, 0) .Vælg' Kontrol af, om værdien i cellen i forrige kolonne er tom 'Gør indtil loop vil løkke, indtil betingelseserklæring returnerer True Loop indtil IsEmpty (ActiveCell.Offset (0, -1)) Område ("A15"). Vælg End Sub Sub Loop2 () 'Beregning af gennemsnit' Do indtil loop vil løbe, indtil celle i den foregående kolonne i den aktive celle er tom 'Denne makro ligner makro Loop1, den eneste måde at beregne gennemsnittet er et andet område ("C15"). Vælg Do' Worsheet.Average -funktion bruges til at beregne den gennemsnitlige ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Værdi, _ ActiveCell.Offset (0, -2) .Værdi) ActiveCell.Offset (1, 0) .Vælg Loop indtil IsEmpty (ActiveCel l.Offset (0, -1)) Område ("A15"). Vælg End Sub Sub Loop3 () 'Beregner gennemsnittet' Do While loop vil køre, indtil cellen i den forrige kolonne i den aktive celle er tom Range ("C15") .Vælg 'Kontrol af, om værdien i cellen i forrige kolonne er tom' Do While -sløjfe vil løkke, indtil betingelsesudsætningen er True Do While IsEmpty (ActiveCell.Offset (0, -1)) = Falsk 'Tildeling af gennemsnitsfunktion på værdi i celler fra tidligere to på hinanden følgende kolonne ActiveCell.FormulaR1C1 = "= Gennemsnit (RC [-1], RC [-2])" 'Flytter til celle i næste række ActiveCell.Offset (1, 0) .Vælg Loop Range ("A15"). Vælg End Sub Sub Loop4 () 'Beregner gennemsnittet' Do While loop vil køre, indtil cellen i den forrige kolonne i den aktive celle er tom 'Denne makro ligner makro Loop3, den eneste måde at anvende betingelsen er et andet område ("C15"). Vælg Do While Not IsEmpty (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" ActiveCell.Offset (1, 0) .Vælg Loop Range (" A15 "). Vælg End Sub Sub Loop5 () 'FOR loop -gentagelser for et fast følelsesløshed er af tider bestemt af antallet af rækker Dim i, lastcell As Long 'Find den sidste række, der indeholder data i kolonne A lastcell = Range ("A" & Cells.Rows.Count). End (xlUp) .Row Range ("C15 ") .Vælg 'i-variabel er tildelt værdi på 15, da vores eksempeldata begynder fra 15. række' FOR Loop loop loop x For i = 15 To lastcell ActiveCell.FormulaR1C1 =" = Average (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0) .Vælg Next i Range (" A15 "). Vælg End Sub Sub Loop6 () 'Beregner gennemsnittet' Do indtil loop vil løbe, indtil cellen i den forrige kolonne i den aktive celle er tom ' Det beregner ikke et gennemsnit, hvis der allerede er noget i celleområdet ("G15"). Vælg Do If IsEmpty (ActiveCell) Herefter ActiveCell.FormulaR1C1 = "= Gennemsnit (RC [-1], RC [-2])" Afslut hvis ActiveCell.Offset (1, 0) .Vælg Loop indtil IsEmpty (ActiveCell.Offset (0, -1)) Range ("E15"). Vælg End Sub Sub Loop7 () 'Do indtil loop kører, så længe der er noget i cellen i næste kolonne 'Det beregner ikke et gennemsnit, hvis der allerede er noget i det aktive c ell 'Heller ikke hvis der ikke er data i celler, der bruges inden for gennemsnitsfunktionen (for at undgå #DIV/0 fejl). 'Beregner gennemsnitsinterval ("L15"). Vælg Do If IsEmpty (ActiveCell) Then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Then ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Gennemsnit (RC [-1], RC [-2]) "End If End Hvis ActiveCell.Offset (1, 0) .Vælg Loop indtil IsEmpty (ActiveCell.Offset (0, 1)) Område ("J15"). Vælg Afslut sub 

Hvis du kunne lide denne blog, kan du dele den med dine venner på Facebook. Du kan også følge os på Twitter og Facebook.

Vi vil meget gerne høre fra dig, lad os vide, hvordan vi kan forbedre vores arbejde og gøre det bedre for dig. Skriv til os på e -mail -stedet