Siirry seuraavaan vba exceliin. Silmukkalausekkeet VBA:ssa. Projekti "Talletustulot"

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.

Visual Basic -silmukkalausekkeelle

Loop lausekerakenne varten Visual Basicissa voidaan järjestää kahdessa muodossa: silmukaksi Sillä…seuraavaksi tai kuin pyörä Jokaiselle.

Kierrä "...seuraavaksi"

Kierrä Sillä…seuraavaksi käyttää muuttujaa, joka ottaa arvoja peräkkäin tietystä alueesta. Jokaisella muuttujan arvon muutoksella suoritetaan silmukan rungon sisältämä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 Kaikki yhteensä.

Yllä olevassa esimerkissä silmukan lisäysaskelta ei ole määritetty, joten muuttujan kasvattamiseksi i 1-10 oletusarvo on lisäys 1 . Joissakin tapauksissa on kuitenkin tarpeen käyttää erilaisia ​​inkrementiarvoja silmukalle. Tämä voidaan tehdä käyttämällä avainsanaa Vaihe, kuten seuraavassa yksinkertaisessa esimerkissä näkyy.

d = 0 - 10 Vaihe 0,1 dYhteensä = dYhteensä + d Seuraava d

Koska yllä olevassa esimerkissä lisäysaskel on asetettu 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ä on lisäysvaihe -1 , joten muuttuja i jokaisella syklin toistolla se saa arvot 10, 9, 8, ... 1.

Jokaiselle silmukalle

Kierrä Jokaiselle näyttää sykliltä Sillä…seuraavaksi, mutta sen sijaan, että kierrettäisiin laskurimuuttujan arvosarjaa Jokaiselle suorittaa joukon toimintoja kullekin objektille tietyssä objektiryhmässä. Seuraavassa esimerkissä käyttämällä silmukkaa Jokaiselle Luetteloi kaikki nykyisen Excel-työkirjan taulukot:

Himmeä wSheet laskentataulukona jokaiselle wSheetille työarkeissa MsgBox "Sheet Found: " & wSheet.Name Seuraava wSheet

Poistu Silmukkakatkosoperaattorille

Operaattori Poistu For käytetään keskeyttämään sykli. Heti kun tämä lauseke kohdataan koodissa, ohjelma lopettaa silmukan suorituksen ja jatkaa koodista löytyneiden lauseiden suorittamista välittömästi tämän silmukan jälkeen. Tätä voidaan käyttää esimerkiksi tietyn arvon etsimiseen taulukosta. Voit tehdä tämän käyttämällä silmukkaa taulukon jokaisen elementin läpi. Kun tarvittava elementti on löydetty, loput eivät ole tarpeen - sykli keskeytyy.

Operaattorin sovellus Poistu For esitetään seuraavassa esimerkissä. Tässä silmukka toistuu 100 taulukkomerkinnän läpi ja vertaa jokaista muuttujan arvoon dVal. Jos osuma löytyy, silmukka keskeytyy:

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

Tee While Loop Visual Basicissa

Kierrä Tehdä, kun suorittaa koodilohkon niin kauan kuin tietty ehto täyttyy. Seuraava on esimerkki menettelystä Sub, jossa silmukan avulla Tehdä, kun Fibonacci-luvut, jotka eivät ylitä 1000, näytetään peräkkäin:

"Ali-menettely tulostaa Fibonacci-luvut, jotka eivät ylitä 1000:a Sub Fibonacci() Dim i As Integer "laskurin, joka osoittaa elementin sijainnin sekvenssissä Dim iFib As Integer "tallentaa sekvenssin nykyisen arvon Dim iFib_Next As Integer "tallentaa sekvenssin seuraava arvo Dim iStep As Integer "tallentaa seuraavan lisäyksen koon "alustaa muuttujat i ja iFib_Next i = 1 iFib_Next = 0 "Do While -silmukkaa suoritetaan, kunnes "nykyisen Fibonacci-luvun arvo ylittää 1000 Do Vaikka iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Annetussa esimerkissä ehto iFib_Next< 1000 tarkistetaan syklin alussa. Jos siis ensimmäinen arvo iFib_Next Jos se olisi enemmän kuin 1000, silmukkaa ei suoritettaisi edes kerran.

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ä, onko ehto tosi.

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

Tee...silmukka kun iFib_Next< 1000

Tee Until Loop Visual Basicissa

Kierrä Tee asti hyvin samanlainen kuin sykli Tehdä, kun: Koodilohkoa silmukan rungossa suoritetaan yhä uudelleen, kunnes määritetty ehto täyttyy (ehdollisen lausekkeen tulos on Totta). Seuraavassa menettelyssä Sub käyttämällä silmukkaa Tee asti poimii arvot kaikista sarakkeen soluista A laskentataulukkoa, kunnes sarakkeessa näkyy tyhjä solu:

IRow = 1 Do till IsEmpty(Cells(iRow, 1)) "Nykyisen solun arvo tallennetaan dCellValues-taulukkoon dCellValues(iRow) = Cells(iRow, 1).Arvo iRow = iRow + 1 Loop

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

Kuitenkin, kuten silmukkaesimerkeissä osoitettiin Tehdä, kun, joissakin tilanteissa haluat silmukan suoritettavan 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))

Loop-lauseet

VBA:ssa Silmukoita on kahta päätyyppiä: silmukat, joissa on laskuri (parametrinen) ja silmukat, joissa on ehto (iteratiivinen).

Laskurisilmukoita käytetään tapauksissa, joissa on tarpeen suorittaa tietyt toiminnot tietyn määrän kertoja.

Ehdollisia silmukoita käytetään, kun tietyt ohjelman toimet on toistettava, kunnes tietty ehto täyttyy.

Silmukat parametreilla Sillä…seuraavaksi

Syklin rakenne:

varten Cycle_parameter = Alkuarvo Vastaanottaja Lopullinen_arvo

[Vaihe vaihe]

Operaattorit

[Poistu varten]

Seuraava [Cycle_parameter]

missä varten avainsana VBA (alkaen), osoittaa jakson alun;

loop_parameter-muuttuja, joka on määritelty silmukkalaskuriksi;

Initial_Value luku, joka määrittää silmukkaparametrin alkuarvon;

Hakusanalla VBA (ennen), jakaminen

Initial_Value ja Final_Knowledge;

Final_Value luku, joka määrittää silmukkaparametrin arvon,

Mihin sykli päättyy;

Vaihe avainsana VBA (askel) käytetään

Silmukkaaskelmääritykset, valinnainen argumentti;

Askel numero, joka määrittää syklin askeleen, ts. arvo, jolla

Suurentaa (tai pienentää) parametrin arvoa

Pyöritä joka vaiheessa. Tämä numero voisi olla

Negatiivinen;

Poistu For silmukasta aikaisen poistumisen operaattori (valinnainen);

Seuraava avainsana VBA (seuraava) merkitsee

Jakson loppu.

Pyörätyö:

Vaihe 1 Ensin määritetään silmukkaparametri, ja tämän muuttujan alku- ja loppuarvot lasketaan ja tallennetaan.

Vaihe 2 Silmukkaparametrille määritetään alkuarvo.

Vaihe 3 Silmukkaparametrin alkuarvoa verrataan lopulliseen arvoon.

Jos silmukan parametri on suurempi kuin lopullinen arvo, ohjelma poistuu välittömästi silmukasta ja hyppää silmukkaa seuraavalle koodiriville.

Vaihe 4 Silmukan runko suoritetaan.

Vaihe 5 Kun silmukan runko on suoritettu, silmukkaparametrille määritetään seuraava arvo. Siirry vaiheeseen 3.

Huomautus.

1. Jos avainsanaa käytetään Vaihe , sitten silmukkaparametri muuttuu tämän sanan jälkeen määritetyn numeron mukaan. Jos sana Vaihe puuttuu, askelarvo on yhtä suuri kuin yksi.

Esimerkki 1.

I = 0 - 10 Vaihe 2 (arvo I kasvaa 2)

2. For...Seuraava silmukka voidaan lopettaa ennenaikaisesti, kun jokin ehto saavutetaan. Tätä varten sinun on asetettava operaattori oikeaan kohtaan silmukassa Poistu For.

Esimerkki 2.

Himmeä S Kokonaislukuna

Himmeä j Kokonaislukuna

S = 2

Jos j = 1 - 10

S = S + j

Jos S > 6 Sitten

Poistu For (Poistu silmukasta, jos arvo S > 6)

Loppu Jos

Seuraava j

Viestilaatikko(S)

Ehdolliset silmukat (iteratiivinen)

Jos jokin toimenpide (useita toimintoja) on suoritettava useita kertoja, mutta ei ole etukäteen tiedossa kuinka monta kertaa ja tämä riippuu jostain ehdosta, kannattaa käyttää sykliä, jossa on ennakko- tai jälkiehto.

VBA:ssa on kaksi pääsykliä DO...LOOP avainsanalla syötetyllä ehdolla Sillä aikaa , ja avainsanan syöttämän ehdon kanssa Siihen asti kun . Molemmat voivat olla joko ennakko- tai jälkiehdollisia.

Syntaksi:

missä tehdä avainsana (do);

Sillä aikaa avainsana (vielä);

Siihen asti kun avainsana (kunnes);

Silmukka avainsana, joka ilmaisee jakson päättymisen;

<условие>looginen lauseke, jonka totuus tarkistetaan

Jokaisen silmukan rungon suorituksen alussa;

<тело_цикла>mielivaltainen operaattoreiden sekvenssi;

Tee... Rakentamisen aikana lukee: tee, kun ehto täyttyy. Suunnittelussa Tee...While For

Tee...kunnes rakentaminen lukee: tehdä, kunnes ehto täyttyy. Suunnittelussa Tee... Kunnes Askeleen lisäämiseksi sinun tulee kirjoittaa erityinen operaattori, koska siinä, toisin kuin suunnittelussa varten , tätä ei tehdä automaattisesti.

Kunto kirjoitettu avainsanan jälkeen Siihen asti kun , tarkistetaan jokaisen iteraation lopussa (kun silmukan runko on suoritettu). Huomaa, että se ei toimi täsmälleen samalla tavalla kuin silmukassa Sillä aikaa . Jos ehto on totta ( Totta ), silmukka päättyy. Jos ehto ei täyty (on väärä Väärä ), silmukan runko suoritetaan uudelleen.

Esimerkki 1.

Ongelman muotoilu. Laske äärellisen sarjan summa aliohjelmalla.

Tehtävän suoritustekniikka:

1. Alkutiedot: i  Z

Tulos: S  R .

2. Kirjoita seuraava mukautettu menettely standardiprojektimoduuliin käyttämällä silmukkaa, jossa on ennakkoehto Sillä aikaa:

Subsumma()

Himmeä S Kokonaislukuna

Dim i Kokonaislukuna

S = 0

i=1

Tee kun i<= 10

S = S + i^2

i = i + 1

Silmukka

Viestilaatikko(S)

Lopeta ala

3. Kirjoita seuraava mukautettu menettely vakioprojektimoduuliin käyttämällä silmukkaa, jossa on ennakkoehto Siihen asti kun:

Subsumma()

Himmeä S Kokonaislukuna

Dim i Kokonaislukuna

S = 0

i=1

Tee kunnes i > 10

S = S + i^2

i = i + 1

Silmukka

Viestilaatikko(S)

Lopeta ala

4 Kirjoita seuraava mukautettu menettely vakioprojektimoduuliin käyttämällä silmukkaa, jossa on jälkiehto Sillä aikaa:

Subsumma()

Himmeä S Kokonaislukuna

Dim i Kokonaislukuna

S = 0

i=1

S = S + i^2

i = i + 1

Loop kun i<= 10

Viestilaatikko(S)

Lopeta ala

5 Kirjoita seuraava mukautettu menettely standardiprojektimoduuliin käyttämällä silmukkaa, jossa on jälkiehto Siihen asti kun:

Subsumma()

Himmeä S Kokonaislukuna

Dim i Kokonaislukuna

S = 0

i=1

S = S + i^2

i = i + 1

Kierrä kunnes i > 10

Viestilaatikko(S)

Lopeta ala

Saattaa olla tilanne, jossa sinun on suoritettava koodilohko useita kertoja. Yleensä käskyt suoritetaan peräkkäin: funktion ensimmäinen lause suoritetaan ensin, sitten toinen jne.

Ohjelmointikielet tarjoavat erilaisia ​​ohjausrakenteita, jotka mahdollistavat monimutkaisemmat suorituspolut.

Silmukkakäsky antaa meille mahdollisuuden suorittaa lauseen tai lausekkeiden ryhmän useita kertoja. Alla on yleinen näkymä silmukkakäskystä VBA:ssa.

VBA tarjoaa seuraavat silmukkatyypit silmukkavaatimusten käsittelemiseksi. Napsauta seuraavia linkkejä tarkistaaksesi niiden tiedot.

silmukalle

For-silmukka on toiston ohjausrakenne, jonka avulla kehittäjä voi kirjoittaa tehokkaasti silmukan, joka on suoritettava tietyn määrän kertoja.

Syntaksi

Alla on for-silmukan syntaksi VBA:ssa.

Laskurille = alku Loppuun .... .... Seuraava

Vuokaavio

Alla on ohjausvirta silmukkatilassa -

  • Ensimmäinen vaihe on suoritettu. Tämän vaiheen avulla voit alustaa kaikki silmukan ohjausmuuttujat ja kasvattaa askellaskurin muuttujaa.
  • Toiseksi kunto arvioidaan. Jos totta, silmukan runko suoritetaan. Jos se on epätosi, silmukan runkoa ei suoriteta ja ohjausvirta siirtyy seuraavaan lauseeseen välittömästi For-silmukan jälkeen.
  • Kun For-silmukka on suoritettu, ohjausvirta siirtyy seuraavaan käskyyn. Tämän lausekkeen avulla voit päivittää kaikki silmukan ohjausmuuttujat. Se päivitetään askellaskurin arvon perusteella.
  • Tilanne on nyt arvioitu uudelleen. Jos tosi, silmukka suoritetaan ja prosessi toistetaan (silmukan runko, sitten askellisäys, sitten ehto uudelleen). Kun ehdosta tulee epätosi, For-silmukka päättyy.

esimerkki

Lisää painike ja lisää seuraava toiminto.

Yksityinen ali Constant_demo_Click() Himmentää a Kokonaislukuna a = 10 Jos i = 0 Vaiheeseen 2 MsgBox "Arvo on i on: " & i Next End Sub

Kun yllä oleva koodi käännetään ja suoritetaan, se tuottaa seuraavan tulosteen.

Arvo on i: 0
Arvo on i: 2
Arvo on i: 4
Arvo on i: 6
Arvo on i: 8
Arvo on i: 10

Suorittaa lausesarjan useita kertoja ja lyhentää koodia, joka ohjaa silmukkamuuttujaa.

... silmukalle

Jokaista silmukkaa käytetään käskyn tai lausekkeiden ryhmän suorittamiseen taulukon tai kokoelman jokaiselle elementille.

Jokaiselle silmukalle on samanlainen kuin For Loop; Silmukka suoritetaan kuitenkin jokaiselle taulukon tai ryhmän elementille. Siksi askellaskuria ei ole tämäntyyppisessä silmukassa. Sitä käytetään pääasiassa taulukoiden kanssa tai objektikontekstissa tiedostojärjestelmä työskennellä rekursiivisesti.

Syntaksi

Alla on VBA:n For Every -silmukan syntaksi.

Jokaiselle ryhmän elementille...Seuraava

esimerkki

Yksityinen Sub Constant_demo_Click() "hedelmät on array hedelmät = Array("omena", "oranssi", "kirsikat") Dim hedelmänimet Varianttina "iteroidaan jokaiselle silmukalle. Jokaiselle tuotteelle hedelmissä hedelmänimet = hedelmien nimet & tuote & Chr(10) Seuraava ViestiBox hedelmänimet End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa kaikki hedelmien nimet yhdellä elementillä jokaiselle riville.

omena
oranssi
kirsikoita

Tämä suoritetaan, jos ryhmässä on vähintään yksi elementti, ja toistetaan jokaiselle ryhmän elementille.

while..wend loop

Jos ehto on True-silmukassa While While ... Wend, kaikki lauseet suoritetaan, kunnes Wend-avainsana löydetään.

Jos ehto on epätosi, silmukka päättyy ja ohjaus siirtyy seuraavaan lauseeseen Wend-avainsanan jälkeen.

Syntaksi

Alla on VBA:n While..Wend-silmukan syntaksi.

Vaikka ehto(t) ... Wend

Vuokaavio

esimerkki

Yksityinen Sub Constant_demo_Click() Dim Counter: Laskuri = 10 kun laskuri< 15 " Test value of Counter. Counter = Counter + 1 " Increment Counter. msgbox "The Current Value of the Counter is: " & Counter Wend " While loop exits if Counter Value becomes 15. End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa seuraavan viestin viestikenttään.

Laskurin nykyinen arvo on: 11
Laskurin nykyinen arvo on: 12
Laskurin nykyinen arvo on: 13
Laskurin nykyinen arvo on: 14
Laskurin nykyinen arvo on: 15

Tämä tarkistaa tilan ennen silmukan rungon suorittamista.

do...when loop

Tee ... while -silmukkaa käytetään, kun haluamme toistaa lausejoukon ehdon ollessa tosi. Kunto voidaan tarkistaa silmukan alussa tai lopussa.

Syntaksi

Alla on Do...While-silmukan syntaksi VBA:ssa.

Do While -ehto...... Loop

Vuokaavio

esimerkki

Seuraava esimerkki käyttää Do ... while -silmukkaa tarkistaakseen tilan silmukan alussa. Silmukan sisällä olevat lauseet suoritetaan vain, jos ehdosta tulee True.

Yksityinen Sub Constant_demo_Click() Do While i< 5 i = i + 1 msgbox "The value of i is: " & i Loop End Sub

i:n arvo on: 1
i:n arvo on: 2
i:n arvo on: 3
I:n arvo on: 4
I:n arvo on: 5

Vaihtoehtoinen syntaksi

Do ... while -silmukalle on myös vaihtoehtoinen syntaksi, joka tarkistaa tilan silmukan lopussa. Suurin ero näiden kahden syntaksin välillä selitetään seuraavassa esimerkissä.

Tee ... ... Silmukka kun kunto

esimerkki

Seuraava esimerkki käyttää Do ... while -silmukkaa tarkistaakseen tilan silmukan lopussa. Silmukan lausekkeet suoritetaan vähintään kerran, vaikka ehto olisi epätosi.

Yksityinen Sub Constant_demo_Click() i = 10 Do i = i + 1 MsgBox "I:n arvo on: " & i Loop While i< 3 "Condition is false.Hence loop is executed once. End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa seuraavan tulosteen viestiruutuun.

I:n arvo on: 11

Do..While -lauseita suoritetaan niin kauan kuin ehto on True. (Toisin sanoen) Silmukka on toistettava, kunnes ehto on False.

do..intil loop

A do ... intil -silmukkaa ei käytetä, kun haluamme toistaa lausejoukon ehdon ollessa epätosi. Kunto voidaan tarkistaa silmukan alussa tai lopussa.

Syntaksi

Alla on VBA:n Do..Until-silmukan syntaksi.

Tee Kunnes ehto ... ... Silmukka

Vuokaavio

esimerkki

Seuraava esimerkki käyttää Tee... Ennen silmukkaa testatakseen ehtoa silmukan alussa. Silmukan sisällä olevat lauseet suoritetaan vain, jos ehto on epätosi. Se poistuu silmukasta, kun ehto toteutuu.

Private Sub Constant_demo_Click() i = 10 Do Until i>15 "Ehto on epätosi. Siten silmukka suoritetaan i = i + 1 msgbox ("I:n arvo on: " & i) Loop End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa seuraavan tulosteen viestiruutuun.

I:n arvo on: 11
I:n arvo on: 12
I:n arvo on: 13
I:n arvo on: 14
I:n arvo on: 15
I:n arvo on: 16

Vaihtoehtoinen syntaksi

On myös vaihtoehtoinen syntaksi, Do... Before Loop, joka testaa ehdon silmukan lopussa. Suurin ero näiden kahden syntaksin välillä selitetään seuraavassa esimerkissä.

Tee ... ... Silmukka kuntoon asti

Vuokaavio

esimerkki

Seuraava esimerkki käyttää Do...Before silmukkaa testatakseen ehtoa silmukan lopussa. Silmukan lausekkeet suoritetaan vähintään kerran, vaikka ehto olisi True.

Yksityinen Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "I:n arvo on: " & i Loop Until i more15 "Ehto on True.Siksi silmukka suoritetaan kerran. End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa seuraavan tulosteen viestiruutuun.

I:n arvo on: 11

Do..Until-lauseet suoritetaan niin kauan kuin ehto on False. (Toisin sanoen) Silmukka on toistettava, kunnes ehto on tosi.

Cycle Control Records

Silmukan ohjauskäskyt muuttavat suorituksen normaalista järjestyksestään. Kun suoritus jättää soveltamisalan, muita silmukkakäskyjä ei suoriteta.

Valvontalausunto ja kuvaus

Operaattorin lähtö

Exit for käytetään, kun haluamme poistua For Loopista tiettyjen kriteerien perusteella. Kun Exit For suoritetaan, ohjaus siirtyy seuraavaan lauseeseen välittömästi For-silmukan jälkeen.

Syntaksi

Alla on Exit For Statement -syntaksi VBA:ssa.

Vuokaavio

esimerkki

Seuraava esimerkki käyttää Exit For. Jos laskuri saavuttaa luvun 4, For Loop päättyy ja ohjaus siirtyy seuraavaan lauseeseen välittömästi For Loopin jälkeen.

Yksityinen Sub Constant_demo_Click() Himmennä a Kokonaislukuna a = 10 Jos i = 0 Vaiheeseen 2 "i on laskurimuuttuja ja sitä kasvatetaan 2:lla MsgBox ("Arvo on i on: " & i) Jos i = 4, niin i = i * 10 "Tämä suoritetaan vain jos i=4 MsgBox ("Arvo on i on: " & i) Poistu "Poistui, kun i=4 End If Next End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa seuraavan tulosteen sanomaruutuun.

Arvo on i: 0
Arvo on i: 2
Arvo on i: 4
Arvo on i: 40

Lopettaa For-silmukan käskyn ja siirtää suorituksen käskyyn välittömästi silmukan jälkeen

Poistu Do

Exit Do -lausetta käytetään, kun haluamme poistua Do Loopsista tiettyjen kriteerien perusteella. Sitä voidaan käyttää sekä Do Do...While- että Do...Befor-silmukoissa.

Kun Exit Do suoritetaan, ohjaus siirtyy seuraavaan käskyyn välittömästi Do-silmukan jälkeen.

Syntaksi

Seuraava on VBA:n Exit Do -käskyn syntaksi.

esimerkki

Seuraava esimerkki käyttää Exit Do. Jos laskuri saavuttaa arvon 10, Do-tulostusrivi päättyy ja ohjaus siirtyy seuraavaan lauseeseen välittömästi For Loopin jälkeen.

Yksityinen Sub Constant_demo_Click() i = 0 Do While i<= 100 If i >10 Then Exit Do " Silmukka poistuu, jos i>10 End If MsgBox ("I:n arvo on: " & i) i = i + 2 Loop End Sub

Kun yllä oleva koodi suoritetaan, se tulostaa seuraavan tulosteen viestiruutuun.

i:n arvo on: 0
i:n arvo on: 2
i:n arvo on: 4
i:n arvo on: 6
i:n arvo on: 8
i:n arvo on: 10

Täyttää Do While -käskyn ja siirtää suorituksen käskyyn välittömästi silmukan jälkeen

Laboratoriotöitä ohjelmoinnin perusteista

2.1. Analyyttisesti esitettyjen funktioiden taulukko
ja lähentyvät lähelle

Työn tavoite

· Haaroittumis- ja syklisten rakenteiden organisoinnin perusteiden teoreettisen tiedon lujittaminen.

· Käytännön ohjelmointitaitojen hankkiminen haaroittavilla ja syklisillä rakenteilla Visual Basic -järjestelmässä.

VB:ssä on kolmenlaisia ​​silmukkalausekkeita:

laskentajakso: For...To...Seuraava

silmukat, joissa on ehdot: Do While...Loop, Do Until...Loop, While...WEend

· silmukat jälkiehdoilla: Tee...silmukka kun, tee...silmukka asti.

Laskentasilmukka – voit selata lausesarjaa tietyn määrän kertoja. Sen syntaksi on seuraava:

varten laskuri = alkaa Vastaanottaja loppu

[operaattorit]

[operaattorit]

Seuraava [ laskuri]

Parametri laskuri on numeerinen muuttuja (kokonaisluku, reaalityyppi tai päivämäärä, muunnelma, valuuttatyyppi), joka kasvaa automaattisesti jokaisen toiston jälkeen. Alkuarvo laskuri yhtä suuri kuin parametri Alkaa, ja viimeinen parametri - loppu. Jos sitä ei ole määritetty, askelta pidetään yhtä suurena kuin 1, askelarvoa voidaan muuttaa. Se voi olla positiivinen tai negatiivinen luku.

Do....silmukalla on neljä syntaktista rakennetta:

Avainsanojen Do... Loop väliset lauseet suoritetaan tietyn määrän kertoja ehdoista riippuen. Esimerkiksi seuraavassa ohjelmafragmentissa, kun C = 100, ehto täyttyy ja silmukka syötetään. Silmukan sisällä kutsutaan proseduuria ja C:n arvoa pienennetään yhdellä. Sitten ehto (C > 0) tarkistetaan uudelleen ja silmukkaoperaattorit suoritetaan uudelleen (ne suoritetaan yhteensä 100 kertaa), kunnes C = 0. Kun ehdosta C > 0 tulee epätosi ja silmukka pysähtyy.

Tee kun C > 0

Sama ohjelmafragmentti, joka suoritetaan silmukalla, jolla on ehto syntaksissa 2:

Tässä tapauksessa silmukka jatkuu niin kauan kuin ehto on False, toisin kuin edellisessä tapauksessa, eli se jatkuu ennen ehdon C = 0 täyttyminen.

Silmukkakäskyt 3 ja 4 ovat syntaksiltaan hyvin samanlaisia ​​kuin kaksi ensimmäistä, paitsi että ehto Ei lasketaan, kunnes silmukka suoritetaan vähintään kerran.

Nämä silmukkasyntaksit voivat käyttää Exit For- ja Exit Do -ehtoisia silmukan lopetuskäskyjä siirtääkseen ohjauksen silmukan takana olevalle operaattorille. Esimerkiksi seuraavassa ohjelmakatkelmassa, jos C:n alkuarvo on >50, silmukka pysähtyy välittömästi.



Tee C asti<= 0

MsgBox "Aloita" arvo on suurempi kuin hyväksyttävä", "Syötevirhe"

While...Wend-silmukkaa käytettiin Visual Basicin varhaisissa versioissa. Sen syntaksi on seuraava:

Sillä aikaa<условие>

<Операторы>

Toisin kuin Do..Loop-silmukassa, While ..Wend -silmukassa ei ole toista vaihtoehtoa, jossa ehto tarkistetaan silmukan lopussa. Lisäksi sille ei ole silmukan poistumiskäskyä, kuten Exit Do.

VBA. Jaksojen järjestäminen.

Loop-lauseita käytetään toistamaan toiminto tai toimintoryhmä tietyn määrän kertoja. Toistojen (silmukkaiteraatioiden) määrä voidaan määrittää ennalta tai laskea.

VBA tukee kahden tyyppisiä silmukkarakenteita:

  1. Silmukat kiinteällä määrällä toistoja ( vastakkaiset silmukat).
  2. Silmukat, joissa on rajoittamaton määrä toistoja ( ehdolliset silmukat).

Konseptia käytetään kaikentyyppisille sykleille silmukan runko , joka määrittää lauseiden lohkon, joka on suljettu silmukan alku- ja loppulausekkeiden väliin. Jokaista silmukan rungon lauseiden suorittamisen toistoa kutsutaan iterointi

Kiinteät syklit

VBA tarjoaa kaksi ohjausrakennetta kiinteän silmukan järjestämiseen: For ... Next (silmukka laskurilla) ja For Every ... Next (silmukka, jossa on luettelo).

Operaattori...Seuraavaksi Tämä on tyypillinen laskurisilmukka, joka suorittaa tietyn määrän iteraatioita. For...Next-lauseen syntaksi on:

varten<счетчик> = <начЗначение>Että<конЗначение>

<блок операторов>

Seuraava [<счетчик>]

Esimerkki For...Next-operaattorin käytöstä.

Listaus 1. Käyttäjä ... Seuraava

' TEHTÄVÄ: Luo ohjelma, joka vastaanottaa kaksi numeroa käyttäjältä.

' Lisää kaikki luvut näiden kahden numeron määrittämälle alueelle ja sitten

' näyttää tuloksena olevan määrän.

Alanäyte7()

Dim i As Integer ‘jaksolaskuri

Dim sStart ‘laskurin aloitusarvo

Dim sEnd ‘loppulaskurin arvo

Dim sSum As Long ‘tuloksena oleva summa

sStart = InputBox("Anna ensimmäinen numero:")

sEnd = InputBox("Anna toinen numero:")

sSum = 0

i = CInt(sAlku) CInt(sEnd)

sSum = sSum + i

Seuraavaksi minä

MsgBox "Numeroiden summa " & sStart & " - " & sEnd & " on: " & sSum

Lopeta ala

Loop-lause jokaiselle...Seuraavakuuluu kohdetyyppioperaattoreiden luokkaan, ts. koskee ensisijaisesti kokoelmia objekteja sekä taulukoita . Silmukan runko suoritetaan kiinteän määrän kertoja, joka vastaa taulukon tai kokoelman elementtien määrää. Jokaiselle...Seuraava lausekemuoto:

Jokaiselle<элемент>Sisään<группа> <блок операторов>Seuraava [<элемент>]

Ehdolliset silmukat (määrittämättömät silmukat)

Ehdollisia silmukoita käytetään, kun toistuvia toimintoja on suoritettava vain tietyissä olosuhteissa. Iteraatioiden määrää ei ole määritelty ja se voi yleensä olla nolla (erityisesti silmukoille, joissa on ennakkoehto). VBA tarjoaa kehittäjille useita ohjausrakenteita ehdollisten silmukoiden järjestämiseen:

  • Neljä erilaista Do.. Loops -silmukkaa, jotka eroavat tarkastettavan ehdon tyypistä ja tämän tarkistuksen suorittamiseen kuluvasta ajasta.
  • Jatkuva silmukka kun... Wend.

Do While... -silmukka on tyypillinen silmukka ennakkoehdoin. Ehto tarkistetaan ennen kuin silmukan runko suoritetaan. Sykli jatkaa työtään siihen asti<условие>suoritetaan (eli sen arvo on True). Koska tarkistus suoritetaan alussa, silmukan runkoa ei ehkä koskaan suoriteta. Tee kun... Silmukkamuoto:

Tehdä, kun<условие>

<блок операторов>

Silmukka

Listaus 2. Do While... Loop

' TEHTÄVÄ: Luo ohjelma, joka vaatii käyttäjän syötteen

"mielivaltainen numerosarja. Syöttö on lopetettava

' vasta kun syötettyjen parittomien lukujen summa ylittää 100.

Alanäyte8()

Dim OddSum Kokonaislukuna ’parittojen lukujen summa

Dim OddStr As String ’merkkijono parittomilla numeroilla

Dim Num ’hyväksyä syötetyt numerot

OddStr = "" 'lähtömerkkijonon alustus

OddSum = 0 'alustaa OddSum

Tee Vaikka OddSum< 100 ‘начало цикла

Num = InputBox("Anna numero: ")

Jos (Num Mod 2)<>0 Sitten pariteettitarkistus

OddSum = OddSum + Num ’parittomien lukujen summan kertymä

OddStr = OddStr & Num & ”

Loppu Jos

Silmukka

"tulosta merkkijono, jossa on parittomat numerot

MsgBox prompt:=”Parittomat numerot: ” & OddStr

Lopeta ala

Tee...silmukkalausekesuunniteltu organisaatiota vartensilmukka jälkiehdoin. Ehto tarkistetaan, kun silmukan runko on suoritettu vähintään kerran. Sykli jatkaa toimintaansa asti<условие>pysyy totta. Tee... Silmukkamuotoilu:

Tehdä<блок операторов>Loop kun<условие>

Listaus 3. Silmukka jälkiehdoin

' TEHTÄVÄ: Luo ohjelma pelille "Arvaa numero". Ohjelman tulee olla satunnainen

" tapa luoda luku väliltä 1 - 1000, käyttäjän täytyy

"Arvaa tämä numero. Ohjelma näyttää vihjeen jokaisesta syötetystä numerosta

' "enemmän tai vähemmän".

Alanäyte8()

Randomize Timer ’alusta satunnaislukugeneraattori

Dim msg As String’ viestimerkkijono

Dim SecretNumber As Long, UserNumber Varianttina

Aloita: SecretNumber = Round(Rnd * 1000) ‘ tietokoneella luotu numero

UserNumber = Tyhjä käyttäjän antama numero

Pelaa peliä

Valitse tapaus tosi

Case IsEmpty(UserNumber): msg = "Anna numero"

Case UserNumber > SecretNumber: msg = "Liian monta!"

Tapaus UserNumber< SecretNumber: msg = “Слишком мало!”

Lopeta valinta

UserNumber = InputBox(prompt:=msg, Title:="Arvaa numero")

Loop While UserNumber<>Salainen numero

'tutkimus

Jos MsgBox("Pelaa uudelleen?", vbYesNo + vbQuestion, "Arvasitko!") = vbKyllä Sitten

GoTo Begin

Loppu Jos

Lopeta ala

Silmukat Tee kunnes... Silmukat ja tee... Silmukat asti ovat aiemmin käsiteltyjen ehdollisten silmukoiden inversioita. Yleensä ne toimivat samalla tavalla, paitsi että silmukan runko suoritetaan, jos ehto on epätosi (ts.<условие>= Väärin). Tee kunnes... Silmukkamuoto:

Tee asti<условие> <блок операторов>Silmukka

Tee... Loop Until -muoto:

<блок операторов>

Loop asti<условие>

Käytännön tehtävä:Kirjoita luetteloiden 10 ja 11 ohjelmat uudelleen käyttämällä käänteissilmukkakäskyjä.

Loop While...Wend koskee myös ehdollisia silmukoita. Tämä operaattori on täysin yhdenmukainen Do While... -silmukkarakenteen kanssa. While...Wend-silmukan muoto:

Sillä aikaa<условие>

<блок операторов>

Lähteä

Tämän operaattorin erottuva piirre on mahdottomuus pakko lopettaminen(keskeyttää) silmukan rungon (Exit Do -operaattori ei toimi While ... Wend -silmukassa).

Syklin keskeyttäminen

Lopettaaksesi iteroinnin aikaisin ja poistuaksesi silmukasta, käytetään Exit-käskyä. Tätä operaattoria voidaan käyttää missä tahansa syklisessä rakenteessa paitsi While... Wend. Yleinen syntaksi Exitin käyttämiselle silmukan katkaisemiseen on:

<начало_цикла>

[<блок операторов1>]

Poistu (For | Tee)

[<блок операторов2>]

<конец_цикла>

Kun Exit-käsky suoritetaan, silmukka keskeytyy ja ohjaus siirtyy käskyä seuraavaan käskyyn<конец_цикла>. Silmukan rungossa voi olla useita Exit-käskyjä.

Listaus 4. Pakota poistuminen silmukasta

Alanäyte9()

Jos i = 1 - 10000000

Jos i = 10, sitten Exit For ' poistu silmukasta, kun laskuri saavuttaa arvon 10

Seuraava




Yläosa