Yksinkertaisin silmukkatyyppi Excel VBA -ohjelmoinnissa on For-Next -silmukka. Silmukkaa ohjataan laskurimuuttujalla, joka alkaa yhdestä arvosta ja pysähtyy toiseen arvoon. For- ja Next-lauseen välissä olevat lauseet ovat lauseita, jotka toistetaan silmukassa.
Esimerkki seuraavaksi
Seuraava esimerkki käyttää For-Next-silmukkaa summaamaan ensimmäiset 1 000 positiivista lukua. Yhteensä-muuttuja alkaa nollasta. Sitten silmukka tapahtuu. Muuttuja Cnt on silmukkalaskuri. Se alkaa luvusta 1 ja sitä kasvatetaan 1:llä joka kerta silmukan läpi. Silmukka päättyy, kun Cnt on 1 000.
Tässä esimerkissä on vain yksi lause silmukan sisällä. Tämä lauseke lisää Cnt:n arvon Total-muuttujaan. Kun silmukka päättyy, MsgBox näyttää numeroiden summan.
Alalisänumerot()
Dim Total As Double
Dim Cnt As Long
Yhteensä = 0
Jos Cnt = 1 - 1000
Yhteensä = Yhteensä + Snt
Seuraava Cnt
MsgBox yhteensä
Lopeta ala
Koska silmukkalaskuri on normaali muuttuja, voit kirjoittaa koodin muuttaaksesi sen arvoa For- ja Next-lauseiden välisessä koodilohkossa. Tämä on kuitenkin erittäin huono käytäntö.
For-Next esimerkit askeleella
Voit käyttää Step-arvoa ohittaaksesi joitain laskuriarvoja For-Next-silmukassa. Tässä on edellinen esimerkki, joka on kirjoitettu uudelleen summaamaan vain parittomat luvut välillä 1 ja 1 000:
Sub AddOddNumbers()
Dim Total As Double
Dim Cnt As Long
Yhteensä = 0
Jos Cnt = 1 - 1000 Vaihe 2
Yhteensä = Yhteensä + Snt
Seuraava Cnt
MsgBox yhteensä
Lopeta ala
Tällä kertaa Cnt alkaa arvosta 1 ja saa sitten arvot 3, 5, 7 ja niin edelleen. Askel-arvo määrittää, kuinka laskuria kasvatetaan. Huomaa, että ylemmän silmukan arvoa (1000) ei itse asiassa käytetä, koska Cnt:n suurin arvo on 999.
Tässä on toinen esimerkki, jossa käytetään Step-arvoa 3. Tämä menettely toimii aktiivisen arkin kanssa ja käyttää vaaleanharmaata varjostusta joka kolmannelle riville riviltä 1 riville 100.
Sub ShadeEveryThirdRow()
Dim i As Long
Jos i = 1 - 100 Vaihe 3
Rivit(i).Sisäpuoli.Väri = RGB(200, 200, 200)
Seuraavaksi minä
Lopeta ala
Tarkista tämän makron suorittamisen tulos.
Käytä silmukkaa taustavarjostuksen lisäämiseen riveille.
For-Next-esimerkki Exit For -lausekkeella
For-Next-silmukka voi sisältää myös yhden tai useamman Exit For -lausekkeen silmukan sisällä. Kun VBA kohtaa tämän käskyn, silmukka päättyy välittömästi.
Seuraava esimerkki esittää Exit For -käskyn. Tämä rutiini on funktiomenettely, joka on tarkoitettu käytettäväksi laskentataulukon kaavassa. Funktio hyväksyy yhden argumentin (muuttujan nimeltä Str) ja palauttaa ensimmäisen numeerisen numeron vasemmalla puolella olevat merkit. Jos argumentti on esimerkiksi "KBR98Z", funktio palauttaa "KBR".
Funktiotekstiosa(Str)
Dim i As Long
TextPart = ""
Jos i = 1 Len(Str)
Jos IsNumeric(Mid(Str, i, 1)) Sitten
Poistu For
Muu
Tekstiosa = Tekstiosa & keskiosa(Str, i, 1)
Loppu Jos
Seuraavaksi minä
Lopeta toiminto
For-Next-silmukka alkaa numerolla 1 ja päättyy numeroon, joka edustaa merkkijonon merkkien määrää. Koodi käyttää VBA:n Mid-funktiota yksittäisen merkin poimimiseen silmukasta. Jos numeerinen merkki löytyy, Exit For -käsky suoritetaan ja silmukka päättyy ennenaikaisesti.
Jos merkki ei ole numeerinen, se liitetään palautettuun arvoon (joka on sama kuin funktion nimi). Ainoa kerta, kun silmukka tutkii jokaista merkkiä, on, jos argumenttina välitetty merkkijono ei sisällä numeerisia merkkejä.
Sisäkkäinen For-Next-esimerkki
Sinulla voi olla silmukassa mikä tahansa määrä lauseita, ja voit sijoittaa For-Next-silmukat muiden For-Next-silmukoiden sisään.
Seuraavassa esimerkissä käytetään sisäkkäistä For-Next-silmukkaa satunnaislukujen lisäämiseen 12 riviltä 5 sarakkeelta solualueelle. Huomaa, että rutiini suorittaa sisäisen silmukan (silmukan rivilaskimella) kerran jokaista ulomman silmukan iteraatiota (silmukka Col-laskimella) varten. Toisin sanoen rutiini suorittaa lauseen Cells(Row, Col) = Rnd 60 kertaa.
Nämä solut täytettiin käyttämällä sisäkkäistä For-Next -silmukkaa.
Sub FillRange()
Dim Col As Long
Himmeä rivi yhtä pitkä
Col = 1 - 5
Rivi = 1 - 12
Solut (rivi, sarake) = Rnd
Seuraava rivi
Seuraava kol
Lopeta ala
Seuraavassa esimerkissä käytetään sisäkkäisiä For-Next-silmukoita kolmiulotteisen taulukon alustamiseen arvolla 100. Tämä rutiini suorittaa käskyn kaikkien silmukoiden keskellä (sijaintikäsky) 1000 kertaa (10 * 10 * 10), joka kerta eri arvojen yhdistelmällä i:lle, j:lle ja k:lle:
Sub NestedLoops()
Himmeä MyArray (10, 10, 10)
Dim i As Long
Himmeä j As Long
Himmeä k As Long
Jos i = 1 - 10
Jos j = 1 - 10
Jos k = 1 - 10
OmaMatriisi(i, j, k) = 100
Seuraava k
Seuraava j
Seuraavaksi minä
' Muut lausunnot menevät tähän
Lopeta ala
Tässä on viimeinen esimerkki, joka käyttää sisäkkäisiä For-Next-silmukoita Step-arvon kanssa. Tämä toimenpide luo shakkilaudan muuttamalla vuorottelevien solujen taustaväriä.
Silmukoiden käyttäminen shakkilautakuvion luomiseen.
Rivilaskurin silmukat ovat 1:stä 8:aan. Jos-niin -rakenne määrittää käytettävän sisäkkäisen For-Next-rakenteen. Parittomilla riveillä Col-laskuri alkaa 2:lla. Parillisten rivien Col-laskuri alkaa 1:llä. Molemmat silmukat käyttävät Step-arvoa 2, joten se vaikuttaa vaihtoehtoisiin soluihin. Kaksi lisälausetta tekevät soluista neliömäisiä (ihan kuin oikea shakkilauta).
Sub MakeCheckerboard()
Dim R As Long, C As Long
Jos R = 1 - 8
Jos WorksheetFunction.IsOdd(R) Sitten
C = 2 - 8 Vaihe 2
Solut (R, C). Sisustus. Väri = 255
Seuraavaksi C
Muu
C = 1 - 8 Vaihe 2
Solut (R, C). Sisustus. Väri = 255
Seuraavaksi C
Loppu Jos
Seuraavaksi R
Rivit ("1:8"). Rivin korkeus = 35
Sarakkeet("A:H").Sarakkeen leveys = 6,5
Lopeta ala