VBA za petlju, Korištenje petlji u VBA u Microsoft Excelu

Anonim

U ovom smo članku obradili različite vrste petlji koje se koriste u VBA -i i kako ih koristiti za izvršavanje istog zadatka na različite načine.

Zašto petlje?

Petlja je jedna od najmoćnijih tehnika programiranja koja se koristi u mnogim programskim jezicima. Petlja se koristi za ponavljanje bloka koda potreban broj puta ili dok se uvjet ne ocijeni kao istinit ili dok se ne postigne određena vrijednost, nakon čega se izvršava sljedeći blok koda.

Svrha Excel VBA petlje je natjerati Excel da ponovi komad koda određeni broj puta. Može se odrediti koliko se puta kôd mora ponoviti kao fiksni broj (npr. Učiniti ovo 10 puta) ili kao varijablu (npr. Učiniti onoliko puta koliko ima redova podataka).

Excel petlje mogu se konstruirati na različite načine kako bi odgovarale različitim okolnostima. Često se isti rezultati mogu postići na različite načine koji odgovaraju vašim osobnim preferencijama.

U Excel VBA postoje tri različite vrste petlji, a to su:

1. UČINITE DO POKRETANJA

2. UČINITE DOK JE Petlja

3. ZA Petlja

1. UČINITE DO POKRETANJA

Petlja DO UNTIL koristi se za ponavljanje bloka koda neograničeno dugo, dok se navedeni uvjet ne postavi na True. Stanje se može provjeriti na početku ili na kraju petlje. Naredba DO UNTIL… LOOP testira stanje na početku, dok naredba DO… LOOP UNTIL testira stanje na kraju petlje.

Sintaksa naredbe DO UNTIL… LOOP

Učiniti do [Stanje]

[Blok koda se ponavlja]

Petlja

Sintaksa naredbe DO… LOOP UNTIL

Čini

[Blok koda se ponavlja]

Petlja do [Stanje]

Objasnili smo primjer DO… UNTIL petlje. Makronaredbe Loop1 i Loop2 koriste se za izračun prosjeka brojeva u stupcu A i stupcu B pomoću petlje DO… UNTIL.

Uzorci podataka prisutni su u rasponu A15: B27. Stupac A sadrži ocjene 1. kruga, a stupac B rezultate 2. kruga. Želimo izračunati prosjeke ocjena u 1. krugu i 2. krug u stupcu C.

U makrou Loop1 koristili smo “FormulaR1C1” za umetanje prosječne formule u aktivnu ćeliju. Izjava o stanju u petlji DO UNTIL provjerava se na kraju petlje.

U makronu Loop2 koristili smo “WorksheetFunction.Average” za umetanje prosječne vrijednosti u aktivnu ćeliju. Čak i u ovoj makronaredbi, iskaz stanja provjerava se na kraju petlje.

Jedina razlika između makroa Loop1 i Loop2 je u tome što Loop1 unosi formulu prosjeka, dok Loop2 izračunava prosjek, a zatim unosi prosječnu vrijednost u aktivnu ćeliju.

2. UČINITE DOK JE Petlja

Petlja DO WHILE koristi se za ponavljanje bloka koda neograničeni broj puta, dok navedeni uvjet nastavlja biti Tačan i zaustavlja se kad uvjet vrati False. Stanje se može provjeriti na početku ili na kraju petlje. Naredba DO WHILE… LOOP testira stanje na početku, dok naredba DO… LOOP WHILE testira stanje na kraju petlje. Naredba DO… LOOP WHILE koristi se kada želimo da petlja pokrene blok koda barem jednom prije provjere stanja.

Sintaksa DO WHILE … LOOP izraza

Učiniti Dok [Stanje]

[Blok koda se ponavlja]

Petlja

Sintaksa naredbe DO… LOOP WHILE

Čini

[Blok koda se ponavlja]

Petlja dok [Stanje]

U ovom primjeru makronaredbe Loop3 i Loop4 koriste se za izračunavanje prosjeka vrijednosti u ćelijama stupca A i stupca B. Obje makronaredbe rade na istim uzorcima koje koriste makronaredbe Loop1 i Loop2. Obojica koriste naredbu DO WHILE za petlju kroz raspon koji sadrži podatke.

Jedina razlika između makronaredbi Loop3 i Loop4 je u tome što su to različiti načini predstavljanja uvjeta DO WHILE petlje.

Budući da makronaredbe Loop3 i Loop4 koriste iste ulazne podatke, pa čak i izvode iste funkcije kao i makro Loop1, tako da će vraćeni izlaz biti isti kao i kod makrona Loop1.

3. FOR petlja

For Loop se koristi za ponavljanje bloka koda određeni broj puta.

Sintaksa FOR petlje

Za count_variable = start_value Do end_value

[blok koda]

Sljedeća count_variable

Makro petlje 5 pokazuje kako koristiti FOR petlju za izračun prosjeka. Također koristi iste uzorke podataka koje koriste druge makronaredbe. Koristili smo 15 kao početnu vrijednost jer uzorci podataka počinju od 15th red. Koristili smo Range ("A" & Cells.Rows.Count) .End (xlUp) .Row za pronalaženje posljednjeg retka koji sadrži podatke. FOR petlja će se ponoviti (lastcell- 15) broj puta.

Izlaz vraćen nakon pokretanja makronaredbe Loop5 isti je kao i makronaredbe Loop1.

Makronaredba Loop6 stvorena je za izračunavanje prosjeka, samo ako je aktivna ćelija koja će imati funkciju prosjeka prazna prije izvođenja makronaredbe.

Uzorci podataka za ovu makronaredbu prisutni su u rasponu E15 do G27.

Koristili smo DO… LOOP WHILE za petlju kroz definirani raspon. Naredba IF koristi se za provjeru sadrži li ćelija u koju će funkcija biti umetnuta vrijednost. Ovaj će makro u ćeliju unijeti prosječnu funkciju samo ako je prazna.

Makro Loop7 također se koristi za izračun prosjeka. On provjerava vrijednosti u stupcu pomoćnika prije nego ocijeni treba li se ponovno petljati. Također provjerava je li referenca ćelije koja se koristi u prosječnoj funkciji prazna.

Uzorci podataka koji se koriste za makro Loop7 nalaze se u rasponu J15: M27.

Stupac M koristi se kao pomoćni stupac. Ovaj će makro umetati prosječnu funkciju samo ako ćelija u stupcu M nije prazna. Ovaj makro provjerava treba li ćelija biti prazna prije nego što u nju ubaci prosječnu funkciju. Neće umetnuti prosječnu funkciju ako je ćelija navedena u prosječnoj funkciji prazna.

Molimo slijedite dolje za kôd

 Opcija Eksplicitna sub petlja1 () 'Izračunavanje prosjeka' Petlja Do Do će petljati sve dok ćelija u prethodnom stupcu aktivne ćelije ne bude prazna Raspon ("C15"). Odaberite Učini 'Dodjeljivanje prosječne funkcije vrijednosti u ćelijama prethodna dva uzastopna stupca ActiveCell. FormulaR1C1 = "= Prosjek (RC [-1], RC [-2])" '' Prelazak na ćeliju u sljedećem retku ActiveCell.Offset (1, 0). Odaberite 'Provjera je li vrijednost u ćeliji prethodnog stupca prazna' Do Do petlja će se petljati sve dok izraz uvjeta ne vrati True Loop until IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Odaberite End Sub Sub Loop2 () 'Izračunavanje prosjeka' Učinit će petlja do ćelije u prethodnoj stupac aktivne ćelije je prazan 'Ovaj je makro sličan makrou Loop1, jedini način izračuna prosjeka je drugačiji raspon ("C15"). Odaberite Do' Worsheet. Funkcija Prosjek se koristi za izračun prosjeka ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Vrijednost, _ ActiveCell.Offset (0, -2) .Vrijednost) ActiveCell.Offset (1, 0). Odaberite Petlja do IsEmpty (ActiveCel l.Offset (0, -1)) Raspon ("A15"). Odaberite End Sub Sub Loop3 () 'Izračunavanje prosjeka' Do while petlja će se pokrenuti sve dok ćelija u prethodnom stupcu aktivne ćelije ne bude prazna Raspon ("C15") .Odaberite "Provjerava je li vrijednost u ćeliji prethodnog stupca prazna" Petlja Do While petljat će sve dok izraz uvjeta ne bude True Do While IsEmpty (ActiveCell.Offset (0, -1)) = False "Dodjeljivanje prosječne funkcije vrijednosti u ćelijama prethodnog stupca dva uzastopna stupca ActiveCell.FormulaR1C1 = "= Prosjek (RC [-1], RC [-2])" '' Prelazak na ćeliju u sljedećem retku ActiveCell.Offset (1, 0). Odaberite raspon petlje ("A15"). Odaberite End Sub Loop4 () 'Izračunavanje prosjeka' Do While petlja će se raditi sve dok ćelija u prethodnom stupcu aktivne ćelije ne bude prazna 'Ova makronaredba slična je makrou Loop3, jedini način primjene uvjeta je drugačiji raspon ("C15"). Odaberite Učiniti dok nije isprazan (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Prosjek (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Odaberite raspon petlje (" A15 "). Odaberite End Sub Sub Loop5 () 'Ponavljanje petlje FOR za fiksnu obamrlost vremena određena brojem redova Dim i, zadnja ćelija kao dugačka 'Pronalaženje posljednjeg retka koji sadrži podatke u stupcu A zadnja ćelija = raspon ("A" & ćelije.redovi.broj). kraj (xlUp). raspon redova ("C15 "). Odabir" i varijabli "dodjeljuje se vrijednost 15 jer naši uzorci podataka počinju od 15. retka" FOR Petlja će petlji x Za i = 15 Do zadnje ćelije ActiveCell.FormulaR1C1 = "= Prosjek (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Odaberite Next i Range (" A15 "). Odaberite End Sub Sub Loop6 ()" Izračunavanje prosjeka "Petlja Do Do će se petljati dok ćelija u prethodnom stupcu aktivne ćelije nije prazna" Ne izračunava prosjek ako već postoji nešto u rasponu ćelija ("G15"). Odaberite Učini ako je prazno (ActiveCell) Zatim ActiveCell.FormulaR1C1 = "= Prosjek (RC [-1], RC [-2])" Prekini ako je ActiveCell.Offset (1, 0). Odaberite Petlja do IsEmpty (ActiveCell.Offset (0, -1)) Raspon ("E15"). Odaberite End Sub Sub Loop7 () 'Do Do petlja radi sve dok postoji nešto u ćeliji u sljedećem stupcu 'Ne izračunava prosjek ako već postoji nešto u aktivnom c ell 'Niti ako u ćelijama nema podataka koji se koriste unutar prosječne funkcije (kako bi se izbjegle #DIV/0 pogreške). 'Izračunavanje prosječnog raspona ("L15"). Odaberite Do If IsEmpty (ActiveCell) then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) then ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Average (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0). Odaberite Loop until IsEmpty (ActiveCell.Offset (0, 1)) Raspon ("J15"). Odaberite End Sub 

Ako vam se dopao ovaj blog, podijelite ga sa svojim prijateljima na Facebooku. Također, možete nas pratiti na Twitteru i Facebooku.

Voljeli bismo vas čuti, javite nam kako možemo poboljšati svoj rad i učiniti ga boljim za vas. Pišite nam na web stranici e -pošte