Hoe de For Each Loop in Excel VBA te gebruiken

Hoe de For Each Loop in Excel VBA te gebruiken
Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Loops en VBA gaan samen, en met een goede reden ook. Bij het omgaan met Microsoft Office-objecten zoals werkmappen, werkbladen en bereiken, kunnen lussen u helpen om relatief gemakkelijk tussen elk ervan te schakelen.





Hoewel min of meer alle VBA-lussen goed werken met objecten, is de 'voor elk'-lus een van de beste opties om met objectverzamelingen te werken. Als Excel VBA nieuw voor u is en u de voor elke lus onder de knie wilt krijgen, kunt u snel leren van enkele van deze voorbeelden. Hier is alles wat u moet weten over deze typische lus.





MAAK GEBRUIK VAN DE VIDEO VAN DE DAG SCROLL OM DOOR TE GAAN MET INHOUD

Voor de syntaxis van elke lus

De syntaxis voor elke lus lijkt veel op de gebruikelijke for-lus in Excel VBA. Dit is de syntaxis:





 For each variable_name in object_collection 

[statement]

[statement]

[statement]

Next variable_name

De lus begint met het sleutelwoord 'voor elk'; u kunt elke variabelenaam gebruiken, gevolgd door de objectverzameling. Het object in de voor elke lus kan cellen, bereiken, werkbladen en zelfs werkmappen zijn. Dat is de schoonheid van deze lus; het geeft je de flexibiliteit om met verschillende Excel-collecties te werken.

De lus doorloopt elke verzamelingswaarde en slaat de referentie op in de gedefinieerde variabelenaam. Na uitvoering voert VBA de opgeslagen instructies binnen de lus uit en gaat naar het volgende object in de verzameling (het volgende trefwoord is hier nuttig). Laten we de codestructuur begrijpen met een eenvoudig voorbeeld.



Hoe de For Each Loop in Excel VBA te gebruiken

Stel dat u een getal wilt afdrukken in de cellen A1 tot en met A10. De beste aanpak is om de functie for each loop te gebruiken met de functie range en de code het nodige te laten doen. Zo kunt u deze eenvoudige taak uitvoeren:

  1. Open de VBA-code-editor door op te drukken Alles + F11 .
  2. Voeg een module in door op de te klikken Modulair optie binnen de Invoegen tabblad.   Excel-blad met een kolomuitvoer's code editor
  3. Maak een subroutine met behulp van de opdracht sub() in het modulevenster van de code-editor. Zorg ervoor dat u de subroutine een betekenisvolle naam geeft. Voor dit voorbeeld kunt u de naam gebruiken voor_elke_lus .

Nu de basis uit de weg is, is het tijd om te beginnen met het schrijven van de code. Typ binnen de subroutine de volgende opdrachten:





 Dim cell as range 

For each cell in Sheets("Sheet1").Range("A1:A10")

cell.value = 10

Next cell

Wanneer de code wordt uitgevoerd, wordt het C variabele zal de waarde van A1 opslaan. Vervolgens, terwijl het verder gaat naar de instructie binnen de lus, evalueert het de opdracht en voert een waarde van 10 in de gedefinieerde cel in, d.w.z. cel A1.

Als het ten slotte naar het volgende sleutelwoord gaat, gaat het naar de volgende waarde, d.w.z. cel A2. De lus loopt totdat hij cel A10 bereikt. Dit is de uiteindelijke uitvoer:





  VBA-codefragment in de editor en Excel-uitvoer

De lus gebruiken met objecten: cellen, bladen en werkmappen

Excel heeft drie hoofdobjecttypen waarmee u regelmatig werkt. Dit zijn cellen, bladen en werkmappen. Hier ziet u hoe u de lus kunt gebruiken met alle drie de objecttypen.

Samen Werken Met Cellen En Loops

Stel dat u een waarde en enkele opmaakvoorwaarden wilt toevoegen aan een celbereik in Blad1. Als eerste stap moet u de voorwaarden binnen de lus definiëren, gevolgd door de opmaakopdrachten.

Typ de volgende code in een subroutine.

 Sub for_each_loop() 



Dim c As Range



For Each c In Sheets("Sheet1").Range("A1:A10")



With c

.Value = 10

.Font.Color = vbRed

.Font.Bold = True

.Font.Strikethrough = True



End With



Next c



End Sub
  VBA-codefragment in de coderingseditor

De met functie is handig bij het uitvoeren van meerdere functies met één specifiek object. Aangezien u een reeks taken wilt uitvoeren met de variabele c, kunt u ze allemaal combineren met de functie with..end with.

De lus stelt de waarde van c gelijk aan elke celwaarde en voert de waarde in als 10. Bovendien verandert de kleur van de cel in rood, wordt de waarde vetgedrukt en doorgehaald. Zodra het alle stappen heeft voltooid, gaat het naar de volgende gedefinieerde waarde in het bereik.

De lus gebruiken om vellen te controleren

Vergelijkbaar met het bovenstaande voorbeeld, kunt u de voor elke lus gebruiken om bladen te controleren. Hoe zit het met het wijzigen van de naam van Sheet1 in Sheet3 met VBA?

U kunt de volgende code gebruiken om de naam van een bestaand werkblad in Excel te wijzigen met VBA:

 Sub for_each_loop_sheets() 



For Each sht In ThisWorkbook.Sheets



If sht.Name = "Sheet1" Then



sht.Name = "Sheet3"



End If



Next sht



End Sub
  VBA-codefragment in de editor

De code loopt door elk blad in de werkmap en controleert de naam van elk blad. Als het de naam Blad1 tegenkomt, verandert het in Blad3. Het gaat door de resterende bladen, indien aanwezig, in de werkmap. Zodra de uitvoering van de code het laatste blad bereikt, verlaat het de lus en de subroutine.

Naast enkele andere veel voorkomende toepassingen, kan dat voeg meerdere werkbladen samen met VBA en werk de inhoud op één blad bij met behulp van lussen.

Schakel door werkmappen met de lus

Ten slotte kunt u de voor elke lus gebruiken om door verschillende werkmappen te schakelen en specifieke taken uit te voeren. Laten we deze functie demonstreren met een voorbeeld.

zet iphone 7 in herstelmodus

U kunt VBA-opdrachten gebruiken om drie nieuwe werkmappen toe te voegen en alle geopende werkmappen samen te sluiten. Hier is hoe je het kunt doen:

 Sub loop_wrkbook() 



Dim wrkbook as workbook



Workbooks.Add

Workbooks.Add

Workbooks.Add



For Each wrkbook In Workbooks



wrkbook.



Next wrkbook



End Sub