Najjednostavniji tip petlje u Excel VBA programiranju je For-Next petlja. Petlja je kontrolirana varijablom brojača, koja počinje na jednoj vrijednosti i zaustavlja se na drugoj vrijednosti. Naredbe između izraza For i sljedećeg iskaza su izjave koje se ponavljaju u petlji.
Primjer For-Next
Sljedeći primjer koristi For-Next petlju za zbrajanje prvih 1000 pozitivnih brojeva. Varijabla Total počinje kao nula. Tada dolazi do petlje. Varijabla Cnt je brojač petlje. Počinje kao 1 i svaki put se povećava za 1 kroz petlju. Petlja završava kada je Cnt 1000.
Ovaj primjer ima samo jedan izraz unutar petlje. Ova izjava dodaje vrijednost Cnt varijabli Total. Kada se petlja završi, MsgBox prikazuje zbroj brojeva.
Podbrojevi dodavanja()
Dim Total kao duplo
Dim Cnt As Long
Ukupno = 0
Za Cnt = 1 do 1000
Ukupno = Ukupno + Cnt
Sljedeći Cnt
MsgBox Ukupno
Kraj Sub
Budući da je brojač petlje normalna varijabla, možete napisati kod kako biste promijenili njegovu vrijednost unutar bloka koda između izraza For i Next. To je, međutim, vrlo loša praksa.
For-Next primjeri s korakom
Možete koristiti vrijednost koraka da preskočite neke vrijednosti brojača u petlji For-Next. Evo prethodnog primjera, prepisanog da zbroji samo neparne brojeve između 1 i 1000:
Sub AddOddNumbers()
Dim Total kao duplo
Dim Cnt As Long
Ukupno = 0
Za Cnt = 1 do 1000 Korak 2
Ukupno = Ukupno + Cnt
Sljedeći Cnt
MsgBox Ukupno
Kraj Sub
Ovaj put, Cnt počinje kao 1, a zatim poprima vrijednosti od 3, 5, 7 itd. Vrijednost koraka određuje kako se brojač povećava. Primijetite da se gornja vrijednost petlje (1000) zapravo ne koristi jer će najviša vrijednost Cnt biti 999.
Evo još jednog primjera koji koristi vrijednost koraka 3. Ovaj postupak radi s aktivnim listom i primjenjuje svijetlosivo sjenčanje na svaki treći red, od retka 1 do retka 100.
PodsjenaSvaki Treći Red()
Dim i As Long
Za i = 1 do 100, korak 3
Redovi(i).Interior.Boja = RGB(200, 200, 200)
Sljedeći i
Kraj Sub
Provjerite rezultat pokretanja ove makronaredbe.
Korištenje petlje za primjenu sjenčanja pozadine na retke.
Primjer For-Next s naredbom Exit For
Petlja For-Next također može uključivati jedan ili više naredbi Exit For unutar petlje. Kada VBA naiđe na ovu izjavu, petlja se odmah završava.
Sljedeći primjer pokazuje naredbu Exit For. Ova rutina je funkcija funkcije, namijenjena za korištenje u formuli radnog lista. Funkcija prihvaća jedan argument (varijabla pod nazivom Str) i vraća znakove lijevo od prve brojčane znamenke. Na primjer, ako je argument "KBR98Z", funkcija vraća "KBR".
Funkcija TextPart(Str)
Dim i As Long
Tekstualni dio = ""
Za i = 1 do Len(Str)
Ako je Numerički(sredina(Str, i, 1)) Onda
Izlaz za
Drugo
TextPart = TextPart & Mid(Str, i, 1)
Završi ako
Sljedeći i
Završna funkcija
Petlja For-Next počinje s 1 i završava brojem koji predstavlja broj znakova u nizu. Kod koristi VBA-ovu Mid funkciju za izdvajanje jednog znaka unutar petlje. Ako se pronađe numerički znak, izvršava se naredba Exit For, a petlja se prerano završava.
Ako znak nije numerički, dodaje se vraćenoj vrijednosti (koja je ista kao i naziv funkcije). Jedini put kada će petlja ispitati svaki znak je ako niz proslijeđen kao argument ne sadrži numeričke znakove.
Ugniježđeni primjer For-Next
Možete imati bilo koji broj izraza u petlji i ugnijezditi For-Next petlje unutar drugih For-Next petlji.
Sljedeći primjer koristi ugniježđenu petlju For-Next za umetanje slučajnih brojeva u raspon ćelija od 12 redaka po 5 stupaca. Primijetite da rutina izvršava unutarnju petlju (petlju s brojačem redaka) jednom za svaku iteraciju vanjske petlje (petlja s brojačem Col). Drugim riječima, rutina izvršava naredbu Cells(Row, Col) = Rnd 60 puta.
Ove ćelije su ispunjene korištenjem ugniježđene For-Next petlje.
Podraspon popunjavanja()
Dim Col As Long
Dim Row As Long
Za Col = 1 do 5
Za red = 1 do 12
Stanice (Red, Col) = Rnd
Sljedeći red
Sljedeći pukovnik
Kraj Sub
Sljedeći primjer koristi ugniježđene petlje For-Next za inicijalizaciju trodimenzionalnog niza s vrijednošću 100. Ova rutina izvršava naredbu u sredini svih petlji (izjava o dodjeli) 1000 puta (10 * 10 * 10), svaki put s različitom kombinacijom vrijednosti za i, j i k:
Sub NestedLoops()
Dim MyArray(10, 10, 10)
Dim i As Long
Dim j As Long
Dim k As Long
Za i = 1 do 10
Za j = 1 do 10
Za k = 1 do 10
Moj niz (i, j, k) = 100
Sljedeći k
Sljedeći j
Sljedeći i
' Ostale izjave idu ovdje
Kraj Sub
Evo posljednjeg primjera koji koristi ugniježđene For-Next petlje, s vrijednošću Step. Ovaj postupak stvara šahovnicu promjenom boje pozadine izmjeničnih ćelija.
Korištenje petlji za stvaranje uzorka šahovnice.
Brojač redaka se kreće od 1 do 8. Konstrukt If-Then određuje koju će ugniježđenu For-Next strukturu koristiti. Za retke s neparnim brojem, Col brojač počinje s 2. Za parne retke, Col brojač počinje s 1. Obje petlje koriste vrijednost koraka od 2, tako da su zahvaćene alternativne ćelije. Dvije dodatne izjave čine ćelije četvrtastim (baš kao prava šahovnica).
Sub MakeCheckerboard()
Dim R kao dugo, C kao dugo
Za R = 1 do 8
Ako WorksheetFunction.IsOdd(R) Onda
Za C = 2 do 8, korak 2
Ćelije (R, C). Interijer. Boja = 255
Sljedeći C
Drugo
Za C = 1 do 8, korak 2
Ćelije (R, C). Interijer. Boja = 255
Sljedeći C
Završi ako
Sljedeći R
Redovi (“1:8”). Visina reda = 35
Stupci(“A:H”).Širina stupca = 6,5
Kraj Sub