VBA för loop, Använda loopar i VBA i Microsoft Excel

Anonim

I den här artikeln har vi täckt olika typer av slingor som används i VBA och hur man använder dem för att utföra samma uppgift på olika sätt.

Varför loopar?

Looping är en av de mest kraftfulla programmeringsteknikerna som används på många programmeringsspråk. Looping används för att upprepa ett kodblock under erforderligt antal gånger eller tills ett givet villkor utvärderas till sant eller ett specifikt värde har uppnåtts, varefter nästa kodblock utförs.

Syftet med en Excel VBA -slinga är att få Excel att upprepa en kodbit ett visst antal gånger. Man kan ange hur många gånger en kod måste upprepas som ett fast nummer (t.ex. gör detta 10 gånger), eller som en variabel (t.ex. gör detta så många gånger som det finns rader med data).

Excel -loopar kan konstrueras på olika sätt för att passa olika omständigheter. Ofta kan samma resultat uppnås på olika sätt för att passa dina personliga preferenser.

Det finns tre olika typer av slingor tillgängliga i Excel VBA, som är:

1. GÖR TILL Slingan

2. GÖR MEDAN Loop

3. FÖR Loop

1. GÖR TILL Slingan

DO UNTIL Loop används för att upprepa ett kodblock på obestämd tid tills det angivna villkoret är satt till True. Villkoret kan antingen kontrolleras i början eller i slutet av slingan. DO UNTIL… LOOP -satsen testar tillståndet i början, medan DO… LOOP UNTIL -satsen testar tillståndet i slutet av Loop.

Syntax för DO TILL TILL… LOOP -uttalande

Gör tills [skick]

[Kodblock som ska upprepas]

Slinga

Syntax för DO … LOOP TILL -uttalande

Do

[Kodblock som ska upprepas]

Loop till [skick]

Vi har förklarat DO … UNTIL loop med ett exempel. Makron Loop1 och Loop2 används för att beräkna genomsnittet av siffror i kolumn A och kolumn B med hjälp av DO… UNTIL -slingan.

Provdata finns i intervallet A15: B27. Kolumn A innehåller poäng av omgång 1 och kolumn B innehåller poäng av omgång 2. Vi vill beräkna medelvärden för poäng i omgång 1 och omgång 2 i kolumn C.

I Loop1 -makro har vi använt "FormulaR1C1" för att infoga medelformel i den aktiva cellen. Villkorsuttalande i DO TILL -slingan kontrolleras i slutet av slingan.

I Loop2 -makro har vi använt ”WorksheetFunction.Average” för att infoga medelvärde i den aktiva cellen. Även i detta makro kontrolleras tillståndsuttalandet i slutet av slingan.

Den enda skillnaden mellan Loop1 och Loop2 -makrot är att Loop1 infogar medelformeln, medan Loop2 beräknar genomsnittet och sedan infogar medelvärdet i den aktiva cellen.

2. GÖR MEDAN Loop

DO WHILE Loop används för att upprepa ett kodblock på obestämd tid, medan det angivna villkoret fortsätter att vara True och stannar när villkoret returnerar False. Villkoret kan antingen kontrolleras i början eller i slutet av slingan. DO WHILE … LOOP -satsen testar villkoret i början, medan DO … LOOP WHILE -satsen testar tillståndet i slutet av slingan. DO … LOOP WHILE -satsen används när vi vill att slingan ska köra kodblocket minst en gång innan vi kontrollerar om tillståndet är.

Syntax för DO WILE… LOOP -uttalande

Gör medan [skick]

[Kodblock som ska upprepas]

Slinga

Syntax för DO … LOOP WHILE uttalande

Do

[Kodblock som ska upprepas]

Slinga medan [skick]

I det här exemplet används Loop3- och Loop4 -makron för att beräkna medelvärden för värden i celler i kolumn A och kolumn B. Båda makron fungerar på samma provdata som används av makron Loop1 och Loop2. Båda använder DO WHILE -satsen för att gå igenom intervallet som innehåller data.

Den enda skillnaden mellan Loop3 och Loop4 makron är att de är olika sätt att representera villkoren för DO WHILE loop.

Eftersom Loop3- och Loop4 -makron använder samma inmatningsdata och till och med utför samma funktioner som Loop1 -makrot, så att den returnerade utmatningen också kommer att vara densamma som för Loop1 -makrot.

3. FOR loop

For Loop används för att upprepa ett kodblock ett visst antal gånger.

Syntax för FOR loop

För count_variable = start_value Till end_value

[kodblock]

Nästa count_variable

Loop5 -makro visar hur man använder FOR loop för att beräkna genomsnittet. Den använder också samma provdata som används av andra makron. Vi har använt 15 som startvärde eftersom provdata börjar från 15th rad. Vi har använt Range ("A" & Cells.Rows.Count) .End (xlUp) .Rad för att hitta den sista raden som innehåller data. FOR loop kommer att upprepa (lastcell- 15) antal gånger.

Utdata som returneras efter att ha kört Loop5 -makrot är samma som för Loop1 -makrot.

Loop6 -makro skapas för att beräkna genomsnittet, bara om den aktiva cellen som kommer att ha medelfunktionen är tom innan makrot körs.

Provdata för detta makro finns i intervallet E15 till G27.

Vi har använt DO… LOOP WHILE för att gå igenom det definierade intervallet. IF -sats används för att kontrollera om cellen där funktionen ska infogas innehåller ett värde. Detta makro infogar bara genomsnittsfunktionen i cellen om den är tom.

Loop7 -makro används också för att beräkna genomsnittet. Den söker efter värden i hjälpkolumnen innan den utvärderar om den ska loopas igen. Den kontrollerar också om cellreferensen som ska användas i genomsnittsfunktionen är tom.

Exempeldata som används för Loop7 -makro ligger inom intervallet J15: M27.

Kolumn M används som hjälpkolonn. Detta makro infogar bara en genomsnittlig funktion om en cell i kolumn M inte är tom. Detta makro kontrollerar att en cell ska vara tom innan en genomsnittlig funktion sätts in i den. Det kommer inte att infoga en genomsnittlig funktion om cellen som refereras till i genomsnittsfunktionen är tom.

Följ koden nedan

 Alternativ Explicit Sub Loop1 () 'Beräknar medelvärde' Gör tills -slingan kommer att loopas tills cellen i den föregående kolumnen i den aktiva cellen är tom Område ("C15"). Välj Gör "Tilldela genomsnittlig funktion på värde i cellerna i föregående två på varandra följande kolumner ActiveCell. FormulaR1C1 = "= Genomsnitt (RC [-1], RC [-2])" 'Flyttar till cell i nästa rad ActiveCell.Offset (1, 0) .Välj' Kontrollera om värdet i cellen i föregående kolumn är tomt 'Gör tills loop kommer att loopa tills villkorssetningen returnerar True Loop Till IsEmpty (ActiveCell.Offset (0, -1)) Område ("A15"). Välj End Sub Sub Loop2 () 'Beräknar genomsnitt' Do Till -slinga kommer att loopa tills cellen i föregående kolumnen i den aktiva cellen är tom 'Det här makrot liknar makrot Loop1, enda sättet att beräkna medelvärdet är olika intervall ("C15"). Välj Gör' Worsheet.Average -funktionen används för att beräkna den genomsnittliga ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0) .Välj loop tills IsEmpty (ActiveCel l.Offset (0, -1)) Område ("A15"). Välj Avsluta subsubslinga3 () 'Beräknar medelvärde' Do While -slinga kommer att köras tills cellen i föregående kolumn i aktiv cell är tom Område ("C15") .Välj 'Kontrollera om värdet i cellen i föregående kolumn är tomt' Do While loop kommer att loopa tills villkoret är True Do While IsEmpty (ActiveCell.Offset (0, -1)) = False 'Tilldela genomsnittlig funktion på värde i celler från tidigare två på varandra följande kolumner ActiveCell.FormulaR1C1 = "= Genomsnitt (RC [-1], RC [-2])" 'Flyttar till cell i nästa rad ActiveCell.Offset (1, 0) .Välj Loop Range ("A15"). Välj End Sub Sub Loop4 () 'Beräknar genomsnitt' Do While loop kommer att köras tills cellen i den föregående kolumnen i den aktiva cellen är tom 'Detta makro liknar makro Loop3, enda sättet att tillämpa villkor är olika intervall ("C15"). Välj Do While Not IsEmpty (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Genomsnitt (RC [-1], RC [-2])" ActiveCell.Offset (1, 0) .Välj Loop Range (" A15 "). Välj End Sub Sub Loop5 () 'FOR loop repeterar för en fast domning antal gånger som bestäms av antalet rader Dim i, lastcell As Long 'Hitta den sista raden som innehåller data i kolumn A lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp) .Row Range ("C15 ") .Välj 'i-variabeln tilldelas värdet 15 när våra provdata börjar från 15: e raden' FOR Loop will loop x For i = 15 To lastcell ActiveCell.FormulaR1C1 =" = Medelvärde (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0) .Välj Next i Range (" A15 "). Välj End Sub Sub Loop6 () 'Beräknar medelvärde' Gör tills -loop kommer att loopas tills cellen i föregående kolumn i aktiv cell är tom ' Det beräknar inte ett genomsnitt om det redan finns något i cellintervallet ("G15"). Välj Do If IsEmpty (ActiveCell) Sedan ActiveCell.FormulaR1C1 = "= Genomsnitt (RC [-1], RC [-2])" Avsluta om ActiveCell.Offset (1, 0) .Välj Loop Till IsEmpty (ActiveCell.Offset (0, -1)) Område ("E15"). Välj End Sub Sub Loop7 () 'Gör tills slingan körs så länge det finns något i cellen i nästa kolumn 'Det beräknar inte ett genomsnitt om det redan finns något i det aktiva c ell 'Inte heller om det inte finns några data i celler som används inom genomsnittsfunktionen (för att undvika #DIV/0 -fel). 'Beräknar medelintervall ("L15"). Välj Do If IsEmpty (ActiveCell) Then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Then ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Genomsnitt (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0) .Välj Loop Till IsEmpty (ActiveCell.Offset (0, 1)) Område ("J15"). Välj Avsluta sub 

Om du gillade den här bloggen, dela den med dina vänner på Facebook. Du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen