Najenostavnejša vrsta zanke v programiranju Excel VBA je zanka For-Next. Zanko nadzira spremenljivka števca, ki se začne pri eni vrednosti in se ustavi pri drugi vrednosti. Stavki med stavkom For in naslednjim so stavki, ki se ponovijo v zanki.
Primer For-Next
Naslednji primer uporablja zanko For-Next za seštevanje prvih 1000 pozitivnih števil. Spremenljivka Total se začne kot nič. Nato pride do zanke. Spremenljivka Cnt je števec zanke. Začne se kot 1 in se vsakič skozi zanko poveča za 1. Zanka se konča, ko je Cnt 1000.
Ta primer ima samo en stavek znotraj zanke. Ta stavek doda vrednost Cnt spremenljivki Total. Ko se zanka zaključi, MsgBox prikaže vsoto številk.
Sub AddNumbers()
Dim Total kot dvojno
Dim Cnt As Long
Skupaj = 0
Za Cnt = 1 do 1000
Skupaj = Skupaj + Cnt
Naslednji Cnt
MsgBox Skupaj
Končni sub
Ker je števec zanke običajna spremenljivka, lahko napišete kodo, da spremenite njeno vrednost v bloku kode med stavkoma For in Next. To pa je zelo slaba praksa.
Primeri For-Next s korakom
Vrednost koraka lahko uporabite za preskok nekaterih vrednosti števcev v zanki For-Next. Tukaj je prejšnji primer, prepisan tako, da sešteje samo liha števila med 1 in 1000:
Sub AddOddNumbers()
Dim Total kot dvojno
Dim Cnt As Long
Skupaj = 0
Za Cnt = 1 do 1000 korak 2
Skupaj = Skupaj + Cnt
Naslednji Cnt
MsgBox Skupaj
Končni sub
Tokrat se Cnt začne kot 1 in nato prevzame vrednosti 3, 5, 7 itd. Vrednost koraka določa, kako se števec poveča. Upoštevajte, da se zgornja vrednost zanke (1000) dejansko ne uporablja, ker bo najvišja vrednost Cnt 999.
Tukaj je še en primer, ki uporablja vrednost koraka 3. Ta postopek deluje z aktivnim listom in uporabi svetlo sivo senčenje za vsako tretjo vrstico, od vrstice 1 do vrstice 100.
Sub ShadeEveryThirdRow()
Dim i As Long
Za i = 1 do 100 3. korak
Vrstice(i).Notranja.Barva = RGB(200, 200, 200)
Naslednji i
Končni sub
Oglejte si rezultat izvajanja tega makra.
Uporaba zanke za uporabo senčenja ozadja za vrstice.
Primer For-Next s stavkom Exit For
Zanka For-Next lahko vključuje tudi enega ali več stavkov Exit For znotraj zanke. Ko VBA naleti na ta stavek, se zanka takoj zaključi.
Naslednji primer prikazuje stavek Exit For. Ta rutina je funkcijski postopek, namenjen uporabi v formuli delovnega lista. Funkcija sprejme en argument (spremenljivko z imenom Str) in vrne znake levo od prve številske števke. Na primer, če je argument »KBR98Z«, funkcija vrne »KBR«.
Funkcija TextPart(Str)
Dim i As Long
TextPart = ""
Za i = 1 do Len(Str)
Če je Numeric(Mid(Str, i, 1)) Potem
Izhod za
Drugače
Del besedila = Del besedila in sredina (Str, i, 1)
Konec Če
Naslednji i
Končna funkcija
Zanka For-Next se začne z 1 in konča s številko, ki predstavlja število znakov v nizu. Koda uporablja funkcijo Mid VBA za ekstrakcijo enega samega znaka znotraj zanke. Če se najde številski znak, se izvede stavek Exit For in zanka se predčasno konča.
Če znak ni številčen, se doda vrnjeni vrednosti (ki je enaka imenu funkcije). Edini čas, ko bo zanka pregledala vsak znak, je, če niz, posredovan kot argument, ne vsebuje številskih znakov.
Ugnezdeni primer For-Next
V zanki imate lahko poljubno število stavkov in ugnezdite zanke For-Next znotraj drugih zank For-Next.
Naslednji primer uporablja ugnezdeno zanko For-Next za vstavljanje naključnih številk v obseg celic 12 vrstic za 5 stolpcev. Upoštevajte, da rutina izvede notranjo zanko (zanko s števcem vrstic) enkrat za vsako ponovitev zunanje zanke (zanko s števcem Col). Z drugimi besedami, podprogram izvede stavek Cells(Row, Col) = Rnd 60-krat.
Te celice so bile napolnjene z uporabo ugnezdene zanke For-Next.
Sub FillRange()
Dim Col As Long
Dim Row As Long
Za Col = 1 do 5
Za vrstico = 1 do 12
Celice (vrstica, stolpec) = Rnd
Naslednja vrstica
Naslednji polk
Končni sub
Naslednji primer uporablja ugnezdene zanke For-Next za inicializacijo tridimenzionalnega niza z vrednostjo 100. Ta rutina izvede stavek v sredini vseh zank (izjava dodelitve) 1000-krat (10 * 10 * 10), vsakič z drugačno kombinacijo vrednosti za i, j in 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
MyArray(i, j, k) = 100
Naslednji k
Naslednji j
Naslednji i
' Druge izjave so tukaj
Končni sub
Tukaj je zadnji primer, ki uporablja ugnezdene zanke For-Next z vrednostjo Step. Ta postopek ustvari šahovnico s spreminjanjem barve ozadja izmeničnih celic.
Uporaba zank za ustvarjanje vzorca šahovnice.
Števec vrstic se spreminja od 1 do 8. Konstrukt If-Then določa, katero ugnezdeno strukturo For-Next uporabiti. Za lihe vrstice se števec Col začne z 2. Za sode vrstice se števec Col začne z 1. Obe zanki uporabljata vrednost koraka 2, tako da vpliva na nadomestne celice. Dve dodatni stavki naredita celice kvadratne (tako kot prava šahovnica).
Sub MakeCheckerboard()
Dim R tako dolgo, C tako dolgo
Za R = 1 do 8
Če je WorksheetFunction.IsOdd(R) Potem
Za C = 2 do 8 korak 2
Celice (R, C). Notranjost. Barva = 255
Naslednji C
Drugače
Za C = 1 do 8 korak 2
Celice (R, C). Notranjost. Barva = 255
Naslednji C
Konec Če
Naslednji R
Vrstice(»1:8«).Višina vrstice = 35
Stolpci(»A:H«).Širina stolpca = 6,5
Končni sub