Inhoudsopgave:
- A Voor-volgend voorbeeld
- Voor-volgende voorbeelden met een stap
- Een For-Next-voorbeeld met een Exit For-statement
- Een genest voorbeeld-voorbeeld
Video: Excel VBA For Loop Example 1 2024
Het eenvoudigste type lus in Excel VBA-programmering is een For-Next-lus. De lus wordt bestuurd door een tellervariabele die begint bij één waarde en stopt bij een andere waarde. De statements tussen de For-statement en de Next-statement zijn de statements die in de loop herhaald worden.
A Voor-volgend voorbeeld
In het volgende voorbeeld wordt een For-Next-lus gebruikt om de eerste 1, 000 positieve getallen te sommeren. De Total-variabele begint als nul. Vervolgens vindt de herhaling plaats. De variabele Cnt is de lusteller. Het begint als 1 en wordt telkens met 1 opgehoogd door de lus. De lus eindigt wanneer Cnt 1, 000 is.
Dit voorbeeld heeft slechts één statement binnen de lus. Met deze instructie wordt de waarde van Cnt toegevoegd aan de variabele Total. Wanneer de lus is voltooid, geeft een MsgBox de som van de getallen weer.
Sub-add-nummers () Dim-totaal als Double Dim Cnt als Long Total = 0 voor Cnt = 1 tot 1000 Total = Total + Cnt Next Cnt MsgBox Total End Sub
Omdat de lusteller een normale variabele is, kunt u schrijven code om de waarde ervan binnen het codeblok tussen de Voor- en de Volgende-instructies te wijzigen. Dit is echter een zeer slechte oefening.
Voor-volgende voorbeelden met een stap
U kunt een stapwaarde gebruiken om een aantal tellerwaarden in een For-Next-lus over te slaan. Hier is het vorige voorbeeld, herschreven om alleen de oneven getallen tussen 1 en 1, 000 op te nemen:
Sub addOddNumbers () Dim Total als Double Dim Cnt As Long Total = 0 For Cnt = 1 To 1000 Step 2 Total = Total + Cnt Volgende Cnt MsgBox Total End Sub
Deze keer begint Cnt als 1 en neemt dan waarden aan van 3, 5, 7, enzovoort. De stapwaarde bepaalt hoe de teller wordt opgehoogd. Merk op dat de bovenste luswaarde (1000) niet daadwerkelijk wordt gebruikt omdat de hoogste waarde van Cnt 999 is.
Hier is nog een voorbeeld dat een stapwaarde van 3 gebruikt. Deze procedure werkt met het actieve werkblad en past lichtgrijze nuances toe op elke derde rij, van rij 1 tot rij 100.
Sub ShadeEveryThirdRow () Dim i zo lang voor i = 1 tot 100 stap 3 rijen (i). Interieur. Kleur = RGB (200, 200, 200) Volgende i Einde sub
Bekijk het resultaat van het uitvoeren van deze macro.
Een lus gebruiken om achtergrondschaduw toe te passen op rijen.Een For-Next-voorbeeld met een Exit For-statement
Een For-Next-lus kan ook een of meer Exit For-instructies bevatten binnen de lus. Wanneer VBA deze instructie tegenkomt, wordt de lus onmiddellijk beëindigd.
In het volgende voorbeeld ziet u de instructie Exit For. Deze routine is een functieprocedure die bedoeld is om te worden gebruikt in een werkbladformule.De functie accepteert één argument (een variabele met de naam Str) en retourneert de tekens links van het eerste cijfer. Als het argument bijvoorbeeld "KBR98Z" is, geeft de functie "KBR. "
Functie TextPart (Str) Dim i As Long TextPart =" "For i = 1 To Len (Str) If IsNumeric (Mid (Str, i, 1)) Then Exit For Else TextPart = TextPart & Mid (Str, i, 1) End If Next i End Function
De For-Next-lus begint met 1 en eindigt met het nummer dat het aantal tekens in de tekenreeks vertegenwoordigt. De code gebruikt de Mid-functie van VBA om één enkel teken binnen de lus te extraheren. Als een numeriek teken wordt gevonden, wordt de instructie Exit For uitgevoerd en eindigt de lus voortijdig.
Als het teken niet numeriek is, wordt het toegevoegd aan de geretourneerde waarde (dit is hetzelfde als de naam van de functie). De enige keer dat de lus elk teken onderzoekt, is of de tekenreeks is doorgegeven omdat het argument geen numerieke tekens bevat.
Een genest voorbeeld-voorbeeld
U kunt een willekeurig aantal instructies in de lus plaatsen en For-Next-lussen in andere For-Next-lussen nestelen.
In het volgende voorbeeld wordt een geneste For-Next-lus gebruikt om willekeurige getallen in te voegen in een cellenbereik van 12 rijen met 5 kolommen. Merk op dat de routine eenmaal de binnenste lus (de lus met de Row-teller) uitvoert voor elke iteratie van de buitenste lus (de lus met de Col-counter). Met andere woorden, de routine voert de Cells (Row, Col) = Rnd-statement 60 keer uit.
Deze cellen zijn gevuld met een geneste For-Next-lus.Sub FillRange () Dim Col Als lange dimrij zo lang voor kolom = 1 tot 5 voor rij = 1 tot 12 cellen (rij, kolom) = Rnd volgende rij volgende Col End Sub
Het volgende voorbeeld gebruikt genest voor -Volgende lussen om een driedimensionale array te initialiseren met de waarde 100. Deze routine voert de instructie uit in het midden van alle lussen (de toewijzingsinstructie) 1, 000 keer (10 * 10 * 10), telkens met een andere combinatie van waarden voor i, j en k:
Sub NestedLoops () Dim MyArray (10, 10, 10) Dim i As Long Dim j As Long Dim k As Long For i = 1 Tot 10 For j = 1 Tot 10 Voor k = 1 tot 10 MyArray (i, j, k) = 100 Volgende k Volgende j Volgende i 'Andere verklaringen gaan hier Einde Sub
Hier is een laatste voorbeeld dat geneste For-Next-lussen gebruikt, met een stapwaarde. Met deze procedure wordt een dambord gemaakt door de achtergrondkleur van afwisselende cellen te wijzigen.
Lussen gebruiken om een dambordpatroon te maken.De Row-teller loopt van 1 tot 8. Een If-Then-constructie bepaalt welke geneste For-Next-structuur moet worden gebruikt. Voor oneven genummerde rijen begint de Col-counter met 2. Voor even genummerde rijen begint de Col-counter met 1. Beide loops gebruiken een Step-waarde van 2, dus andere cellen worden beïnvloed. Twee extra verklaringen maken de cellen vierkant (net als een echt dambord).
Submaakcontrolerboard () Dim R As Long, C As Long For R = 1 tot 8 If WorksheetFunction. IsOdd (R) Vervolgens voor C = 2 tot 8 Stap 2 Cellen (R, C). Interieur. Kleur = 255 Volgende C anders Voor C = 1 tot 8 Stap 2 Cellen (R, C). Interieur. Kleur = 255 Volgende C Einde als volgende R-rijen ("1: 8").RowHeight = 35 kolommen ("A: H"). ColumnWidth = 6. 5 End Sub