Wilt u repetitieve taken in Excel automatiseren met VBA? Leer hoe u de For Each-lus gebruikt om gegevens in uw spreadsheets efficiënt te manipuleren.

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.

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:

Voor elke variabele_naam in object_collection

[stelling]

[stelling]

[stelling]

Volgende variabele_naam

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-verzamelingen te werken.

instagram viewer

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 alt + F11.
  2. Voeg een module in door op de te klikken Modulair optie binnen de Invoegen tabblad.
  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:

Vage cel als bereik

Voor elke cel in bladen("Blad 1").Bereik("A1:A10")

cel.waarde = 10

Volgende cel

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:

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()

Afm c Als Bereik

Voor elke c in vellen ("Blad 1").Bereik("A1:A10")

Met C

.Waarde = 10

.Lettertype. Kleur = vbRood

.Lettertype. Vet = WAAR

.Lettertype. Doorhalen = WAAR

EindeMet

volgende c

Einde Sub

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 het 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()

VoorElkstInDit werkboek.Lakens

Als st. Naam = "Blad 1" Dan

st. Naam = "Blad3"

EindeAls

Volgende sht

Einde Sub

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 bladeren en specifieke taken uit te voeren. Laten we deze functie demonstreren met een voorbeeld.

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:

Subloop_wrkbook()

Dim werkboek als werkboek

Werkboeken.Toevoegen

Werkboeken.Toevoegen

Werkboeken.Toevoegen

Voor elk werkboek in werkboeken

werkboek.Dichtbij

Volgend werkboek

Einde Sub

De bovenstaande code sluit ook uw macrowerkmap; zorg ervoor dat je je codes hebt opgeslagen voordat je deze code uitvoert.

Omdat loops meerdere toepassingen hebben, kan jij dat ook consolideer gegevens uit meerdere werkmappen in één werkmap.

Een geneste IF-instructie gebruiken met de lus

Net als in het bovenstaande voorbeeld kunt u een IF-instructie binnen de lus gebruiken om te controleren op specifieke voorwaarden. Laten we de achtergrondkleur van de cel wijzigen op basis van de waarden van de cel.

Er zijn een paar willekeurige getallen in cellen A1:A20. U kunt een lus schrijven om door elke gegeven cel in het bereik te bladeren; als de waarde van de cel kleiner is dan 10, moet de kleur van de cel veranderen in rood. Als de celwaarde groter is dan 10, moet deze groen worden. Gebruik hiervoor de volgende code:

Sublus_w_if()

Afm c Als Bereik

Voor elke c in vellen ("Blad 4").Bereik("A1:A20")

AlsC.Waarde < 10 Dan

C. Interieur. KleurIndex = 3

Anders: C. Interieur. KleurIndex = 4

EindeAls

volgende c

Einde Sub

Zo ziet de uitvoer eruit:

Lussen gebruiken in Excel VBA

Excel VBA is niet beperkt tot alleen de voor elke lus. Er zijn verschillende handige loops waarmee u gemakkelijk verschillende functies kunt uitvoeren. Zeg adieu tegen alledaagse, handmatige taken, want VBA's loops zoals de for-lus, do while en do until loops komen binnen om je leven gemakkelijker te maken.