Paprasčiausias „Excel“ VBA programavimo ciklo tipas yra „For-Next“ ciklas. Kilpą valdo skaitiklio kintamasis, kuris prasideda nuo vienos vertės ir sustoja ties kita. Teiginiai tarp teiginių „For“ ir „Next“ yra teiginiai, kurie kartojasi cikle.
„For-Next“ pavyzdys
Šiame pavyzdyje pirmiesiems 1 000 teigiamų skaičių sumuojama naudojama For-Next kilpa. Bendras kintamasis prasideda nuo nulio. Tada įvyksta kilpa. Kintamasis Cnt yra kilpos skaitiklis. Jis prasideda kaip 1 ir kiekvieną kartą per kilpą didinamas 1. Ciklas baigiasi, kai Cnt yra 1000.
Šiame pavyzdyje ciklo viduje yra tik vienas teiginys. Šis teiginys prideda Cnt reikšmę prie kintamojo Total. Kai ciklas baigiasi, MsgBox rodo skaičių sumą.
Papildomi numeriai ()
Pritemdytas viso kaip dvigubas
Dim Cnt As Long
Iš viso = 0
Kai Cnt = 1 iki 1000
Iš viso = Iš viso + Cnt
Kitas Cnt
„MsgBox“ iš viso
Pabaigos sub
Kadangi ciklo skaitiklis yra įprastas kintamasis, galite parašyti kodą, kad pakeistumėte jo reikšmę kodo bloke tarp For ir Next sakinių. Tačiau tai yra labai bloga praktika.
For-Next pavyzdžiai su žingsniu
Galite naudoti žingsnio reikšmę, norėdami praleisti kai kurias skaitiklio reikšmes cikle For-Next. Štai ankstesnis pavyzdys, perrašytas taip, kad būtų sumuojami tik nelyginiai skaičiai nuo 1 iki 1 000:
Sub AddOddNumbers()
Pritemdytas viso kaip dvigubas
Dim Cnt As Long
Iš viso = 0
Jei Cnt = 1–1000, 2 veiksmas
Iš viso = Iš viso + Cnt
Kitas Cnt
„MsgBox“ iš viso
Pabaigos sub
Šį kartą Cnt prasideda kaip 1, o tada įgyja 3, 5, 7 ir tt reikšmes. Žingsnio reikšmė nustato, kaip skaitiklis didinamas. Atkreipkite dėmesį, kad viršutinė kilpos reikšmė (1000) iš tikrųjų nenaudojama, nes didžiausia Cnt reikšmė bus 999.
Štai dar vienas pavyzdys, kuriame naudojama 3 žingsnio reikšmė. Ši procedūra veikia su aktyviu lapu ir taiko šviesiai pilką atspalvį kiekvienai trečiai eilutei nuo 1 iki 100 eilutės.
Sub ShadeEveryThirdRow()
Dim i As Long
Jei i = 1–100, 3 veiksmas
Eilutės(i).Interjeras.Spalva = RGB(200, 200, 200)
Toliau i
Pabaigos sub
Patikrinkite šios makrokomandos paleidimo rezultatą.
Kilpos naudojimas fono šešėliavimui pritaikyti eilutėms.
„For-Next“ pavyzdys su „Exit For“ teiginiu
„For-Next“ ciklas taip pat gali apimti vieną ar daugiau „Exit For“ teiginių cikle. Kai VBA susiduria su šiuo teiginiu, ciklas nedelsiant nutraukiamas.
Toliau pateiktame pavyzdyje parodytas teiginys Exit For. Ši procedūra yra funkcijos procedūra, skirta naudoti darbalapio formulėje. Funkcija priima vieną argumentą (kintamąjį, pavadintą Str) ir grąžina simbolius į kairę nuo pirmojo skaitmeninio skaitmens. Pavyzdžiui, jei argumentas yra „KBR98Z“, funkcija grąžina „KBR“.
Funkcijos teksto dalis (Str)
Dim i As Long
TextPart = ""
Jei i = 1 iki Len (Str)
Jei yra skaičius(Mid(Str, i, 1)) Tada
Išeiti už
Kitas
Teksto dalis = TextPart & Mid(Str, i, 1)
Pabaiga, jei
Toliau i
Pabaigos funkcija
Ciklas For-Next prasideda skaičiumi 1 ir baigiasi skaičiumi, nurodančiu simbolių skaičių eilutėje. Kodas naudoja VBA vidurio funkciją, kad ištrauktų vieną simbolį cikle. Jei randamas skaitinis simbolis, vykdomas sakinys Exit For ir ciklas baigiasi anksčiau laiko.
Jei simbolis nėra skaitinis, jis pridedamas prie grąžinamos reikšmės (kuri yra tokia pati kaip funkcijos pavadinimas). Vienintelis kartas, kai ciklas ištirs kiekvieną simbolį, yra tada, jei eilutėje, kuri perduodama argumente, nėra skaitinių simbolių.
Įdėtas sekančiam pavyzdys
Cikloje galite turėti bet kokį teiginių skaičių ir sudėti For-Next kilpas kitose For-Next kilpose.
Šiame pavyzdyje naudojama įdėta For-Next kilpa atsitiktiniams skaičiams įterpti į 12 eilučių po 5 stulpelių langelių diapazoną. Atkreipkite dėmesį, kad rutina vieną kartą vykdo vidinę kilpą (ciklą su eilučių skaitikliu) kiekvienai išorinės kilpos (ciklo su Col skaitikliu) iteracijai . Kitaip tariant, rutina 60 kartų vykdo sakinį Cells(Row, Col) = Rnd.
Šios ląstelės buvo užpildytos naudojant įdėtą For-Next kilpą.
Sub FillRange()
Dim Col As Long
Dim Row As Long
Jei Col = nuo 1 iki 5
Eilutei = nuo 1 iki 12
Ląstelės (eilutė, kolona) = Rnd
Kita eilutė
Kitas plk
Pabaigos sub
Kitame pavyzdyje naudojamos įdėtos For-Next kilpos, kad inicijuotų trimatį masyvą su reikšme 100. Ši rutina įvykdo sakinį visų ciklų viduryje (priskyrimo sakinys) 1000 kartų (10 * 10 * 10), kiekvieną kartą su skirtingu i, j ir k reikšmių deriniu:
Sub NestedLoops ()
Dim MyArray (10, 10, 10)
Dim i As Long
Dim j Kaip Ilgas
Dim k As Long
Jei i = 1-10
Jei j = 1–10
Jei k = 1-10
Mano masyvas(i, j, k) = 100
Kitas k
Kitas j
Toliau i
Kiti teiginiai pateikiami čia
Pabaigos sub
Štai paskutinis pavyzdys, kuriame naudojamos įdėtos For-Next kilpos su žingsnio reikšme. Ši procedūra sukuria šaškių lentą, pakeisdama kintančių langelių fono spalvą.
Kilpų naudojimas šaškių lentos raštui sukurti.
Eilučių skaitiklis sukasi nuo 1 iki 8. Konstrukcija „If-Then“ nustato, kurią įdėtą „For-Next“ struktūrą naudoti. Nelyginių eilučių Col skaitiklis prasideda skaičiumi 2. Lyginių eilučių Col skaitiklis prasideda 1. Abiejose kilpose naudojama 2 žingsnio reikšmė, todėl paveikiami alternatyvūs langeliai. Du papildomi teiginiai padaro langelius kvadratiniais (kaip tikra šaškių lenta).
Sub MakeCheckerboard()
Dim R As Long, C As Long
Jei R = 1-8
Jei WorksheetFunction.IsOdd(R) Tada
Jei C = 2–8, 2 veiksmas
Ląstelės (R, C).Interjeras.Spalva = 255
Kitas C
Kitas
Jei C = 1–8, 2 veiksmas
Ląstelės (R, C).Interjeras.Spalva = 255
Kitas C
Pabaiga, jei
Toliau R
Eilutės („1:8“). Eilutės aukštis = 35
Stulpeliai („A:H“).Stulpelio plotis = 6,5
Pabaigos sub