Silmukat VBA:ssa

On tilanteita, joissa VBA-ohjelman on suoritettava samat toiminnot useita kertoja peräkkäin (eli toistettava sama koodilohko useita kertoja). Tämä voidaan tehdä käyttämällä VBA-silmukoita.

VBA-silmukat sisältävät:

Seuraavaksi tarkastelemme lähemmin jokaista näistä sykleistä.

Silmukkaoperaattorille Visual Basicissa

Silmukkaoperaattorin rakenne - Visual Basicissa voidaan järjestää kahdessa muodossa: silmukaksi Sillä… Seuraavaksi tai silmukana Jokaiselle.

Kierrä "... Seuraavaksi"

Sykli Sillä… Seuraavaksi käyttää muuttujaa, joka ottaa arvoja peräkkäin tietystä alueesta. Jokaisella muuttujan arvon muutoksella suoritetaan syklin runkoon sisältyvät toiminnot. Tämä on helppo ymmärtää yksinkertaisesta esimerkistä:

Jos i = 1 - 10 Yhteensä = Yhteensä + iArray(i) Seuraava i

Tässä yksinkertaisessa ketjussa Sillä… Seuraavaksi muuttujaa käytetään i, joka ottaa peräkkäin arvot 1, 2, 3, … 10, ja jokaiselle näistä arvoista suoritetaan silmukan sisällä oleva VBA-koodi. Siten tämä silmukka summaa taulukon elementit. iArray muuttujassa Yhteensä.

Yllä olevassa esimerkissä silmukan lisäystä ei ole määritetty, joten muuttujan kasvattamiseksi i 1-10, oletusarvo on lisäys 1… Joissain tapauksissa on kuitenkin tarpeen käyttää eri inkrementtiarvoja silmukalle. Tämä voidaan tehdä käyttämällä avainsanaa Vaihekuten seuraavassa yksinkertaisessa esimerkissä näkyy.

d = 0 - 10 Vaihe 0.1 dYhteensä = dYhteensä + d Seuraava d

Koska yllä olevassa esimerkissä lisäysaskel on asetettu yhtä suureksi kuin 0.1, sitten muuttuja dYhteensä jokaiselle syklin toistolle saa arvot 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Voit määrittää silmukan vaiheen VBA:ssa käyttämällä negatiivista arvoa, esimerkiksi näin:

Jos i = 10 - 1 Vaihe -1 iArray(i) = i Seuraava i

Tässä lisäys -1, joten muuttuja i jokaisella syklin toistolla saa arvot 10, 9, 8, … 1.

Silmukka "Jokaiselle"

Sykli Jokaiselle samanlainen kuin sykli Sillä… Seuraavaksi, mutta sen sijaan, että iteroitaisiin laskurimuuttujan arvosarjan yli, silmukka Jokaiselle suorittaa joukon toimintoja kullekin objektille määritetyssä objektiryhmässä. Seuraavassa esimerkissä käyttämällä silmukkaa Jokaiselle luettelee kaikki nykyisen Excel-työkirjan taulukot:

Himmennä wSheet laskentataulukona jokaiselle wSheetille työarkeissa MsgBox "Найден лист: " & wSheet.Name Seuraava wSheet

Silmukan keskeytyslause "Exit For"

operaattori Poistu For käytetään keskeyttämään sykli. Heti kun tämä lauseke kohdataan koodissa, ohjelma lopettaa silmukan suorittamisen ja jatkaa niiden lauseiden suorittamiseen, jotka ovat koodissa välittömästi tämän silmukan jälkeen. Tätä voidaan käyttää esimerkiksi tietyn arvon etsimiseen taulukosta. Tätä varten jokainen taulukon elementti tarkistetaan silmukan avulla. Heti kun tarvittava elementti löytyy, muita ei tarvitse käydä läpi – sykli keskeytyy.

Operaattorin sovellus Poistu For esitetään seuraavassa esimerkissä. Tässä silmukka iteroi yli 100 taulukkomerkintää ja vertaa kutakin muuttujan arvoon dVal… Jos osuma löytyy, silmukka päättyy:

Jos i = 1 - 100 Jos dArvot(i) = dVal, IndexVal = i Poistu loppuun, jos seuraava i

Do While -silmukka Visual Basicissa

Sykli Tehdä, kun suorittaa koodilohkon niin kauan kuin määritetty ehto täyttyy. Seuraava on esimerkki menettelystä alla, jossa käytetään silmukkaa Tehdä, kun Fibonacci-luvut, jotka eivät ylitä 1000, näytetään peräkkäin:

'Aliproseduuri tulostaa Fibonacci-lukuja, jotka eivät ylitä 1000 Sub Fibonacci() Dim i As Integer '-laskuri, joka osoittaa elementin sijainnin sekvenssissä Dim iFib As Integer 'tallentaa sekvenssin nykyisen arvon Dim iFib_Next As Integer 'tallentaa seuraavan arvon sekvenssistä Dim iStep As Integer 'tallentaa seuraavan lisäyksen koon 'alustaa muuttujat i ja iFib_Next i = 1 iFib_Next = 0 'Do While -silmukka suoritetaan, kunnes nykyisen Fibonacci-luvun arvo on suurempi kuin 1000 Doext1000 iFii_1 1 Sitten 'erityistapaus ensimmäiselle elementille iStep = 0 iFib = 1 Muuten 'tallenna seuraavan lisäyksen koko ennen kuin korvaat 'sekvenssin nykyisen arvon iStep = iFib iFib = iFib_Next End If 'tulosta nykyinen Fibonacci-numero sarakkeessa A aktiivinen laskentataulukko 'rivillä, jonka indeksi on i Cells(i , 1). Arvo = iFib 'laske seuraava Fibonacci-luku ja lisää elementin sijaintiindeksiä 1:llä iFib_Next = iFib + iStep i = i + XNUMX Loop End Sub

Annetussa esimerkissä ehto iFib_Seuraava < 1000 tarkistetaan silmukan alussa. Jos siis ensimmäinen arvo iFib_Next Jos niitä olisi enemmän kuin 1000, silmukkaa ei koskaan suoritettaisi.

Toinen tapa toteuttaa silmukka Tehdä, kun - aseta ehto ei silmukan alkuun, vaan sen loppuun. Tässä tapauksessa silmukka suoritetaan vähintään kerran riippumatta siitä, täyttyykö ehto.

Kaavamaisesti tällainen sykli Tehdä, kun Kun ehto tarkistetaan lopussa, näyttää tältä:

Tee... Silmukka kun iFib_Next < 1000

Valitse "Do Until" Visual Basicissa

Sykli Tee asti hyvin samanlainen kuin pyörä Tehdä, kun: silmukan rungossa oleva koodilohko suoritetaan yhä uudelleen ja uudelleen, kunnes määritetty ehto täyttyy (ehdollisen lausekkeen tulos on Totta). Seuraavassa menettelyssä alla sykliä käyttämällä Tee asti noutaa arvot kaikista sarakkeen soluista A laskentataulukkoa, kunnes sarake kohtaa tyhjän solun:

iRow = 1 Do till IsEmpty(Cells(iRow, 1)) 'Nykyisen solun arvo on tallennettu taulukkoon dCellValues>dCellValues(iRow) = Cells(iRow, 1).Arvo iRow = iRow + 1 Loop

Yllä olevassa esimerkissä ehto IsEmpty(solut(iRow, 1)) sijaitsee rakenteen alussa Tee asti, joten silmukka suoritetaan vähintään kerran, jos ensimmäinen solu ei ole tyhjä.

Kuitenkin, kuten silmukkaesimerkeissä näkyy Tehdä, kun, joissakin tilanteissa on välttämätöntä, että silmukka suoritetaan vähintään kerran riippumatta ehdollisen lausekkeen alkuperäisestä tuloksesta. Tässä tapauksessa ehdollinen lauseke tulee sijoittaa silmukan loppuun seuraavasti:

Tee ... Silmukka, kunnes on tyhjä (solut (iRow, 1))

Jätä vastaus