Hurok operátorok vba-ban. VBA hurkok. Folytatás és kilépési nyilatkozatok

28.03.2020 hírek

A For….Next ciklus algoritmus az ábrán látható. 5.28.

Számláló – bármely VBA numerikus változó, általában egész vagy hosszú változó.

Rajt - bármely numerikus kifejezés meghatározza kezdő érték a Számláló változóhoz.

Vége – egy numerikus kifejezés, amely meghatározza egy változó végső értékét Számláló .

Nyilatkozatok – egy, több vagy nincs operátor. Ezek az utasítások végrehajtják a ciklus törzsét. A VBA ezeket az utasításokat minden alkalommal végrehajtja, amikor a ciklus végrehajtódik.

Kulcsszó Következő

Számláló=számláló+StepSise

9.28. ábra. For….Next loop algoritmus

Kulcsszó Következő közli a VBA-val, hogy elérkezett a ciklus vége. Opcionális számláló változó után kulcsszó A Következőnek ugyanannak a Számláló változónak kell lennie, amelyet a For kulcsszó után adtunk meg a ciklusstruktúra elején.

Szintaxis:

Számláló esetén = Kezdettől végéig

Cikk végrehajtásakorMertKövetkező VBAa következőképpen zajlik:

Hozzárendeli a által képviselt értéket Csillag , változó VAL VEL nagynéni .

Végrehajtja az összes által képviselt utasítást Nyilatkozatok amíg el nem éri a kulcsszót Következő . Kulcsszó Következő jelzi a VBA-nak, hogy a huroktörzs végét elérték.

Változót módosít VAL VEL nagynéni az összeggel StepSize (ha az opcionális Step szó szerepel) Ha a Step nincs megadva, akkor a VBA 1-gyel növeli a számlálóváltozót.

Visszatér a ciklus elejére, és összehasonlítja a változó aktuális értékét VAL VEL nagynéni az End által képviselt értékkel. Ha az érték VAL VEL nagynéni értéknél kisebb Vége , a VBA a kulcsszó utáni első utasítástól folytatja a végrehajtást Következő .

9.2.4. Egydimenziós és kétdimenziós tömbök I/O-ja

Sor(sor) olyan változók gyűjteménye, amelyeknek közös neve és alaptípusa van. A tömb kényelmes módja több kapcsolódó adatelem egyetlen tárolóban való tárolásának a nagyobb programozási kényelem és hatékonyság érdekében. A tömbben tárolt összes adatelemnek azonos típusúnak kell lennie.

Egy tömb lehetővé teszi számos adatelem tárolását és kezelését egyetlen változón keresztül. A nyomon követendő különböző változónevek számának csökkentése mellett a tömbök használatának másik fő előnye, hogy a hurkok segítségével könnyen feldolgozhatók a különböző tömbelemek. A tömbök és hurokstruktúrák (általában For....Next) kombinálásával kis számú, nagy mennyiségű adatot feldolgozó utasítást írhat. Ugyanazon feladatok egyedi változók használatával történő végrehajtásához több száz utasítás írására lehet szükség.

Tömb dimenzió

A programozási nyelvek jellemzően egydimenziós és többdimenziós tömböket használnak, amelyek közül néhány viszonylag egyszerű, mások pedig összetettebb objektumokat írnak le.

Egydimenziós tömbök

Az egydimenziós tömb példáját a 9.9. számú táblázat tartalmazza.

táblázat 9.9

A programozásban általában a nulla alapú számozást használják.

Egy adott tömbelemben tárolt adatok eléréséhez meg kell adni a tömb nevét, amelyet egy elemindexnek nevezett szám követ. Az index zárójelben van. Például, ha az #1.1 táblában lévő tömb neve DoubleArray, akkor a következő utasítás a 45-ös számot rendeli a DoubleAny változóhoz.

DoubleAny = DoubleArray (3)

Ebben az utasításban a 3-as szám a tömb indexe. Mivel az elemszámozás nullával kezdődik, az operátor által hivatkozott elem valójában a DoubleArray negyedik eleme.

A DoubleArray utasítás végrehajtásakor a VBA kiválasztja a 45 értéket, és eltárolja ezt az értéket a DoubleArray változóban.

Ugyanaz az operátor használható adatok tömbben való tárolásakor:

DoubleArray (5)=12.

Az utasítás végrehajtásakor a VBA a 12-es értéket helyezi el a megadott tömbelemben, lecserélve az elem korábbi tartalmát.

Az egydimenziós tömböket általában különböző adatlisták ábrázolására használják.

Többdimenziós tömbök

Ha az adattáblákat sorok és oszlopok formátumban rendezett adatokkal kell ábrázolni, akkor erre többdimenziós tömböket használnak.

Egy kétdimenziós tömbben minden cella címe két számból áll: a sorszámból (első index) és az oszlop számából (második index). A VBA-ban legfeljebb 60 dimenziós tömbök hozhatók létre.

Ha egy tömb elemeinek száma nem változik, akkor az ilyen tömböt statikusnak nevezzük.

Statikus és dinamikus tömbök

Ha egy VBA program végrehajtásakor módosíthatja egy tömb elemeinek számát, akkor az ilyen tömböket dinamikusnak nevezzük. A dinamikus tömb méretének módosításához használja a ReDim operátort.

A VBA fenntart egy fenntartott memóriaterületet a tömb összes eleme számára, amíg a tömbtípus változó létezik. Az ilyen tömböket statikusnak nevezzük, mivel a tömb elemeinek száma nem változik.

Operátorválasztási lehetőség Bázis

A VBA általában nulla alapú tömböket használ. Az Option Base operátor lehetővé teszi, hogy 0 vagy 1 értéket adjon meg a tömbindexek alapértelmezett magjaként. Ha az üzemeltető választási lehetőség Bázis nincs használatban, a VBA 0-tól kezdi az indexszámozást (alapértelmezett). Változók, konstansok vagy eljárások deklarálása előtt el kell helyeznie az Option Base utasítást a modul deklarációs területére. Nem helyezhet el Option Base utasítást egy eljáráson belül. Modulonként csak egy Option Base utasítása lehet.

Szintaxis:

választási lehetőség Bázis 0|1

Tömbök deklarálása

Tömb deklarálása operátor segítségével Homályos a következő szintaxissal rendelkezik.

Szintaxis:

DimVarName()

Dim VarName (felső, felső]…)[ Mint típus],

VarName – a tömb bármely neve, amely megfelel az azonosítók elnevezésére vonatkozó VBA-szabályoknak.

Alsó indexek – tömbdimenzió.

Típusként - adattípus.

Alsó – az indexérték alsó határa.

Felső – az index értékének felső határa.

Típus – adattípus

Ha kihagyja a típust, az összes tömbelem Variant típusú lesz. A VBA a numerikus tömbök elemeit nullává, a karakterlánc tömb elemeit pedig üres karakterláncokká inicializálja.

Dim str_array (1–100) Karakterláncként

Dim variáns_array()

Dim str_Multiplication (0-tól 15-ig, 0-tól 15-ig) karakterláncként

Tömbök használata

Egy tömbelem eléréséhez meg kell adnia a tömb nevét, majd az indexértéket, zárójelben.

Egy tömbelemre való hivatkozás a következő szintaxissal rendelkezik.

Szintaxis.

tömbnév(érvényesIndex1, ….)

validIndex – tömbnév.

validIndex1 – érvényes indexérték a tömb első dimenziójához.

validIndex2 – érvényes indexérték a tömb második dimenziójához.

Minden egyes tömbdimenzióhoz meg kell adnia egy indexértéket, amikor hozzáfér a tömb bármely eleméhez.

Egydimenziós tömbök I/O

Egydimenziós tömb bevitelekor egymás után kell megadni az 1., 2. stb. A tömbelemek hasonlóan működnek a kimenetkor. Egy tömb beviteléhez vagy kimenetéhez meg kell szervezni egy hurkot. Az egydimenziós tömb bevitelének és kiadásának legkényelmesebb módja egy feltétel nélküli hurkot használó algoritmus.

Az egydimenziós tömb bemeneti/kimeneti algoritmusa az 5.29. ábrán látható.

Az eljárást alább ismertetjük.

Sub Massiv() – az eljárás neve.

Dim Mas (5) As Integer – egy 5 elemből álló egydimenziós tömböt deklarált, a számok típusa egész szám.

Dim s As String – munkaváltozót deklarált a párbeszédpanelen lévő tömbből származó adatok végső kimenetéhez. As String – adattípus a tárolási változóban.

Ha i = 1-től 5-ig – az első For….Next ciklusban szereplő eljárás 1-től 5-ig terjedő egész számokat vesz fel, és egy tömbbe helyezi őket.

Mas (i) = InputBox (i) – egy egész szám bevitele az i-edik elemhez.

Következő – áttérés a második ciklusra (a tömbelemek sorba kerülnek, és párbeszédpanelen jelennek meg az MsgBox operátor segítségével).

Ha i = 1-től 5-ig – elemek az 1-től 5-ig.

s = s & Mas(i) & " ;" - tömbelemekből karakterláncot alkotni. A tömb egy sorra van nyomtatva. A tömbelemeket „;” karakter választja el.

MsgBox s – az előzőleg bevitt tömb kimenete.

5.27. Egydimenziós bemeneti-kimeneti algoritmus

Rizs. 9.29. Egydimenziós tömb input-output algoritmusa és eljárása

2D tömb I/O

A kétdimenziós tömb be- és kimenetének algoritmusát és eljárását az 5.30. ábra mutatja be.

Az eljárás leírása:

Sub Massiv() – eljárás neve

Az eljárásban használt változók deklarálása:

Dim Mas (5, 5) Egész számként – egy 5 oszlopból és öt sorból álló kétdimenziós tömböt deklarált, a számok típusa egész szám.

Dim s As String – munkaváltozót deklarált a párbeszédpanelen lévő tömbből származó adatok végső kimenetéhez. As String – adattípus a tárolási változóban

Következő i – a változó hozzárendelési művelet vége

Tömbelemek bevitele a számítógép memóriájába:

i = 1-től 5-ig – a bevitel az első sor első eleméből történik, majd a másodikból stb.

j = 1-től 5-ig az első sor végéig, majd a második sor első elemétől stb.

Mas(i,j) = InputBox(i,j) – operátor tömbelemek számítógép memóriájába bevitelére

Rizs. 9.30. Kétdimenziós tömb input-output algoritmusa és eljárása

Tömbrendező algoritmusok

Példaként adunk egy algoritmust és eljárást egy egydimenziós tömb „buborék” módszerrel történő rendezésére.

A beírt tömb elemeinek kiadása a számítógép memóriájából:

i = 1-től 5-ig – a kimenet ugyanúgy történik, mint a bemenet

s = s & Mas (i,j) & “ ; ”

s = s & Chr (13) – soremelés (kimenet nem egy sorban, hanem többben, mint a bemeneti tömbben)

Következő i – a For….Next operátor vége

MsgBox s – az előzőleg beírt tömb kimenete a párbeszédpanelbe

End Sub – az eljárás vége.

A hurkok lehetővé teszik egy vagy több kódsor többszöri végrehajtását. A VBA a következő hurkokat támogatja:

For...Következő Mindegyik...Következő Do... Loop

A For konstrukció. . . Következő. Ha az ismétlések száma előre ismert, a For ciklus használatos. . . Következő. A For ciklus egy hurokváltozónak vagy hurokszámlálónak nevezett változót használ, amely a ciklus minden megismétlésekor egy meghatározott mennyiséggel növekszik vagy csökken. Ennek a konstrukciónak a szintaxisa a következő:

Számláló esetén = start Vége operátorok Következő

A számláló, a kezdet, a vége és a növekmény paraméterei numerikusak.

Jegyzet. A növekmény paramétere lehet pozitív vagy negatív. Ha pozitív, akkor a start paraméternek kisebbnek vagy egyenlőnek kell lennie, mint a végparaméter, különben a ciklus nem fog végrehajtani. Ha a növekmény negatív, akkor a kezdésnek nagyobbnak vagy egyenlőnek kell lennie a végével, hogy a ciklus törzse végrehajtható legyen. Ha a Lépés paraméter nincs megadva, a növekmény paraméter alapértelmezett értéke 1.

A VBA egy For ciklust hajt végre a következő sorrendben:

1. Beállítja a hurokváltozó számláló értékét, hogy elinduljon.

2. Összehasonlítja a hurokváltozó számláló értékét a végparaméter értékével. Ha a számláló nagyobb, a VBA befejezi a ciklust. (Ha a növekmény negatív, a VBA leállítja a ciklus végrehajtását, ha a hurokváltozó számlálójának értéke kisebb, mint az end értéke.)

3. Végrehajtja az utasításhurok törzsében lévő utasításokat.

4. Növeli a hurokváltozó számláló értékét 1-gyel vagy a növekmény paraméter értékével, ha meg van adva.

5. Ismételje meg a 2–4. lépéseket.

Vegyünk egy példát: Számítsuk ki az f(t) függvény értékét

adott a, b, n esetén, ha t a-ról b-re változik a Dt=(b-a)/(n-1) lépéssel.

Sub example3() Dim f() As Single Dim a As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1" , b) : Hívás read("c1", n) ReDim f(1 To n - 1) dt = (b - a) / (n - 1) : t = a Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") For i = 1 To n - 1 t = t + dt Ha t<= -1 Then f(i) = -1 ElseIf t >1 Akkor f(i) = 1 Else f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Hívás out("c" & (2 + i), f(i)) Következő i End Sub

A For Every Construct. . . Következő

Minden hurokhoz. . . A Next hasonló a For ciklushoz. . . Következő, de megismétli az utasítások egy csoportját minden egyes objektumhalmazból vagy egy tömbből, ahelyett, hogy meghatározott számú alkalommal ismételné meg az utasításokat. Különösen akkor hasznos, ha nem tudjuk, hány elem van egy halmazban.

A For Every loop konstrukció szintaxisa. . . Következő:

Minden elemhez A csoport utasításaiban Következő elem

Tartsa szem előtt a következő korlátozásokat, amikor egy For Every ciklust használ. . . Következő:

Halmazok esetén az elem paraméter csak típusváltozatú változó, objektum általános változója vagy az Objektumböngészőben felsorolt ​​objektum lehet.

Tömbök esetén az elem paraméter csak Variant típusú változó lehet

Nem használhat minden egyes hurkot. . . Következő egy tömb, amelynek felhasználó által meghatározott típusa van, mivel a variáns típusú változó nem tartalmazhat felhasználó által meghatározott típusú értéket

Csinálj...Hurkos kialakítást

A Do ciklus egy utasításblokk korlátlan számú végrehajtására használható. A Do tervezésnek több változata is létezik. . . Hurok, de mindegyik kiértékel egy feltétel kifejezést, hogy meghatározza, mikor kell kilépni a ciklusból. Mint az If konstrukciónál. . . Ekkor a feltételnek olyan értéknek vagy kifejezésnek kell lennie, amely hamis (nulla) vagy igaz (nem nulla) értékre számít.

A következő konstrukcióban a Do. . . A hurokutasítások mindaddig végrehajtásra kerülnek, amíg a feltétel értéke True:

Do While Condition Loop utasításokat

A ciklus végrehajtásakor a VBA először ellenőrzi a feltételt. Ha a feltétel False, akkor az összes ciklusutasítást kihagyja. Ha igaz, a VBA végrehajtja a hurokutasításokat, visszatér a Do While utasításhoz, és újra teszteli a feltételt.

Ezért a konstrukció által képviselt hurok tetszőleges számú alkalommal végrehajtható, amíg a feltétel értéke nem nulla vagy igaz. Vegye figyelembe, hogy a ciklustörzs utasításai még egyszer sem hajtódnak végre, ha a feltétel első ellenőrzésekor hamisnak bizonyul.

Vegyünk egy példát: Számítsuk ki egy sorozat összegét

adott pontossággal.

Alpélda4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Hívás read("a1", x) : Call read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Do While Abs(m) >= e p = -p * x m = p / i s = s + m Call out("a" & (2 + i), i) : Call out("b" & (2 + i), Abs (m)) : Kihívás ("c" & (2 + i), s) i = i + 1 hurokvég

A Do design másik változata. . . A Loop először végrehajtja a ciklustörzs utasításait, majd minden végrehajtás után ellenőrzi a feltételt. Ez a változat biztosítja, hogy a ciklustörzs utasítások legalább egyszer végrehajtásra kerüljenek:

Do utasítások Loop While feltétel

A hurokkonstrukció másik két változata hasonló az előzőekhez, azzal a különbséggel, hogy a ciklus akkor hajtódik végre, ha a feltétel hamis:

A ciklus egyáltalán nem, vagy többször is végrehajtódik:

Feltételig csináld

Hurok operátorok

A ciklus legalább egyszer végrehajtásra kerül:

operátorok

Hurok állapotig

7.2 Beágyazott hurkok.

Vezérlőstruktúrákat helyezhet el más vezérlőstruktúrákon belül (például egy If...Then blokk egy For...Next hurkon belül). Egy másik vezérlőstruktúra belsejében elhelyezett vezérlőszerkezetről azt mondjuk, hogy beágyazott.

A vezérlőstruktúrák egymásba ágyazásának mélysége a VBA-ban nincs korlátozva. A kód olvashatóságának javítása érdekében beágyazott vezérlőstruktúrák használatakor alkalmazzák a döntéshozó konstrukció vagy ciklus törzsének eltolását a programban.

Ha egy hurkon belül egy vagy több másik hurok is be van ágyazva, beágyazott hurokról beszélünk, amelyek különbséget tesznek a külső (befogó) és a belső (beágyazott) hurok között.

Tekintsünk egy példát az A(n,m) mátrix Aij elemeinek soronkénti összegzésére.

Alpélda5() Dim a() As Single, s() As Single Dim n As Integer, m As Integer Dim i As Integer, j As Integer Call read("a1", n): Call read("b1", m ) ReDim a(1-től n-ig, 1-ig m-ig), s(1-től n-ig) "Mátrix olvasása i = 1-től n-ig j = 1-től m-ig Readcell(i + 1, j, a(i, j)) hívása Következő j Következő i "Számítás i = 1-hez n s(i) = 0-hoz j = 1-hez m s(i) = s(i) + a(i, j) Következő j Outcell(i + 1, m + 1) hívása , s(i)) Következő i Vége Sub

Vegye figyelembe, hogy az első Next utasítás bezárja a belső For ciklust, az utolsó Next utasítás pedig a külső For ciklust. Hasonlóképpen, a beágyazott If utasítások esetén az End If utasítások automatikusan a legközelebbi If utasítás bezárásához kerülnek alkalmazásra. Beágyazott Do szerkezetek. . . A ciklusok hasonló módon működnek: a legtávolabbi Loop utasítás megegyezik a legtávolabbi Do utasítással.

Elemek beírásakor/kivételekor kétdimenziós tömb munkalaphoz Microsoft Excel Kényelmes egyéni I/O eljárások használata:

Sub readcell(i As Integer, j As Integer, val As Variant) val = Lap1.Cells(i, j).Érték vége Sub Sub outcell(i As Integer, j As Integer, val As Variant) Sheet1.Cells(i, j).Érték = val End Sub

ahol I a sor száma, j a munkalap oszlopának száma.

Kilépés a vezérlőstruktúrákból

Az Exit utasítás lehetővé teszi, hogy közvetlenül kilépjen egy For ciklusból, Do ciklusból, Sub eljárásból vagy Function eljárásból. Az Exit utasítás szintaxisa egyszerű:

Számláló esetén = eleje Befejezéséig [kimutatás blokk] [kimutatás blokk] Következő teendő [(Míg | Amíg) feltétel] [kimutatás blokk] [kimutatás blokk] Hurok

Kilépés ehhez a For cikluson belül és az Exit Do a Do cikluson belül tetszőleges számú alkalommal megjelenhet.

Az Exit Do utasítás a Do ciklus szintaxisának összes változatával működik.

Az Exit For és az Exit Do utasítások akkor használatosak, ha egy ciklust azonnal le akar bontani anélkül, hogy további iterációkat folytatna, vagy megvárná, amíg a ciklustörzsben egy utasításblokk befejeződik.

Amikor az Exit utasítást használja a ciklusból való kilépéshez, a ciklusváltozó értékei attól függenek, hogy a ciklus hogyan végződik:

Ha egy ciklus normálisan végződik, a ciklusváltozó értéke eggyel nagyobb, mint a hurkok számának felső korlátja

Ha egy ciklus idő előtt véget ér, a ciklusváltozó megtartja értékét, amelyet a szokásos szabályok szerint kapott

Amikor a ciklus a halmaz végén véget ér, a ciklusváltozó Nothing, ha objektum típusú változó, vagy Üres, ha Variant típusú változó.

Vannak helyzetek, amikor egy VBA-programnak ugyanazt a műveletsort többször egymás után végre kell hajtania (vagyis többször meg kell ismételnie ugyanazt a kódblokkot). Ezt VBA hurkok segítségével lehet megtenni.

Loop utasításhoz a Visual Basicben

Loop utasítás szerkezete Mert V Visual Basic kétféle formában szervezhető: hurokként A… Továbbra vagy mint egy ciklus Az egyes.

Ciklus "A következőre..."

Ciklus A… Továbbra olyan változót használ, amely szekvenciálisan veszi az értékeket egy adott tartományból. A változó értékének minden változásával a ciklus törzsében szereplő műveletek végrehajtásra kerülnek. Ez könnyen érthető egy egyszerű példából:

Ha i = 1-től 10-ig Összesen = Összesen + iArray(i) Következő i

Ebben az egyszerű hurokban A… Továbbra változót használjuk én, amely egymás után felveszi az 1, 2, 3, ... 10 értékeket, és ezeknek az értékeknek mindegyikére végrehajtódik a cikluson belüli VBA-kód. Így ez a ciklus összegzi a tömb elemeit iArray változóban Teljes.

A fenti példában a hurok növekedési lépése nincs megadva, ezért a változó növeléséhez én 1-től 10-ig az alapértelmezett a növekmény 1 . Bizonyos esetekben azonban különböző növekményértékeket kell használni a hurokhoz. Ezt a kulcsszó használatával lehet megtenni Lépés, amint azt a következő egyszerű példa mutatja.

d = 0-tól 10-ig 0.1 lépés dÖssz = dÖssz + d Következő d

Mivel a fenti példában a növekmény lépése a következőre van állítva 0.1 , majd a változót dÖsszesen a ciklus minden ismétléséhez 0,0, 0,1, 0,2, 0,3, ... 9,9, 10,0 értékeket vesz fel.

A huroklépés meghatározásához a VBA-ban negatív értéket használhat, például így:

Ha i = 10-től 1-hez lépés -1 iArray(i) = i Következő i

Itt van a növekmény lépése -1 , tehát a változó én a ciklus minden ismétlésével 10, 9, 8, ... 1 értékeket vesz fel.

Minden hurokhoz

Ciklus Az egyes ciklusnak tűnik A… Továbbra, hanem ahelyett, hogy végigpörgetné a számlálóváltozó értéksorát Az egyes műveleteket hajt végre minden egyes objektumhoz egy meghatározott objektumcsoportban. A következő példában hurkot használva Az egyes Az aktuális lap összes lapja megjelenik munkafüzet Excel:

Dim wSheet munkalapként minden wSheet a Worksheetsben MsgBox "Sheet Found: " & wSheet.Name Next wSheet

Kilépés a hurokmegszakítás operátorból

Operátor Kilépés erre: a ciklus megszakítására szolgál. Amint ez az utasítás megjelenik a kódban, a program befejezi a ciklus végrehajtását, és közvetlenül a ciklus után végrehajtja a kódban található utasításokat. Ez használható például egy adott érték keresésére egy tömbben. Ehhez használjon egy ciklust a tömb egyes elemeinek áttekintésére. Ha megtalálta a kívánt elemet, nem kell átnézni a többit - a ciklus megszakad.

Kezelői alkalmazás Kilépés erre: a következő példában mutatjuk be. Itt a ciklus 100 tömbbejegyzésen keresztül hurkol, és mindegyiket összehasonlítja a változó értékével dVal. Ha talál egyezést, a ciklus megszakad:

Ha i = 1-től 100-ig Ha dÉrtékek(i) = dVal, akkor IndexVal = i Kilépés a végére, ha következő i

Végezze el a While Loop műveletet a Visual Basicben

Ciklus Csinálni, miközben kódblokkot hajt végre, amíg egy adott feltétel teljesül. A következő példa az eljárásra Alatti, amelyben egy hurok segítségével Csinálni, miközben Az 1000-et meg nem haladó Fibonacci-számok sorban jelennek meg:

"A Sub eljárás 1000-nél nem nagyobb Fibonacci számokat nyomtat ki Sub Fibonacci() Dim i As Integer "egy számláló, amely jelzi egy elem pozícióját a Dim iFib As Integer sorozatban "tárolja a sorozat aktuális értékét Dim iFib_Next As Integer "tárolja a a sorozat következő értéke Dim iStep As Integer "tárolja a következő növekmény méretét "inicializálja az i és iFib_Next változókat i = 1 iFib_Next = 0 "a Do While ciklus addig hajtódik végre, amíg az "aktuális Fibonacci szám értéke nem haladja meg az 1000 Do értéket Míg az 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

A megadott példában a feltétel iFib_Next< 1000 a ciklus elején ellenőrizni kell. Ezért, ha az első érték iFib_Next Ha több, mint 1000, akkor a ciklus még egyszer sem kerül végrehajtásra.

A hurok megvalósításának másik módja Csinálni, miközben– a feltételt ne a ciklus elejére, hanem a végére helyezzük. Ebben az esetben a ciklus legalább egyszer végrehajtásra kerül, függetlenül attól, hogy a feltétel igaz-e.

Sematikusan egy ilyen ciklus Csinálni, miközben a végén a feltétel ellenőrzésével így fog kinézni:

Do...Loop While iFib_Next< 1000

Végezze el az Until Loop műveletet a Visual Basicben

Ciklus Tedd Amíg nagyon hasonlít egy ciklushoz Csinálni, miközben: A ciklus törzsében lévő kódblokk újra és újra lefut, amíg a megadott feltétel teljesül (a feltételes kifejezés eredménye Igaz). A következő eljárásban Alatti hurok segítségével Tedd Amíg kivonja az értékeket egy oszlop összes cellájából A munkalapot, amíg üres cellát nem talál az oszlopban:

IRow = 1 Do Til IsEmpty(Cells(iRow, 1)) "Érték aktuális cella tömbben tárolva dCellValues>dCellValues(iRow) = Cells(iRow, 1).Érték iRow = iRow + 1 hurok

A fenti példában a feltétel Üres (Cellák (iRow, 1)) a szerkezet elején található Tedd Amíg, ezért a ciklus legalább egyszer végrehajtásra kerül, ha az első cella nem üres.

Azonban, amint az a hurokpéldákban látható Csinálni, miközben, bizonyos helyzetekben azt szeretné, hogy a ciklus legalább egyszer végrehajtásra kerüljön, függetlenül a feltételes kifejezés kezdeti eredményétől. Ebben az esetben a feltételes kifejezést a ciklus végére kell helyezni, így:

Csináljon... Hurok addig, amíg üres (Cellák (iRow, 1))

A döntéshozatali struktúrákon kívül létezik egy másik típusú irányítási struktúra, az úgynevezett ciklus.

Ciklus egy algoritmikus struktúra, amelynek segítségével az operátorblokkok többszörös ismétlése valósul meg.

A Visual Basicben három fő ciklustípus létezik, amelyek a For:Next, Do:Loop és While:Wend konstrukciók segítségével valósulnak meg.

For: Következő ciklus. Akkor használatos, ha egy adott utasításblokk ismétlődéseinek száma előre ismert. Ez a design így néz ki:

Számlálóhoz = kezdeti érték A végső értékhez Operators1 Operators2 Következő [számláló]

A fenti utasítások első végrehajtásakor a számlálóváltozó kezdeti értéket kap, amely után két opció lehetséges. Ha a feltételszámláló > végső érték ellenőrzése eredményeként a True értéket kapjuk, akkor a ciklus véget ér, és az operators1 és operators2 blokkok soha nem kerülnek végrehajtásra. Másrészt, ha a feltételteszt eredménye hamis, akkor az utasításblokkok első alkalommal kerülnek végrehajtásra, ami után megtörténik az átmenet a ciklus elejére. Ezután a számláló változó értékét növeljük a Step kulcsszó után található lépéssel (ha hiányzik, a lépés = 1 van beállítva). Ezt követően ismét ellenőrizzük a feltételszámláló > végső érték stb. igazságtartalmát, a ciklus vége abban a pillanatban következik be, amikor ennek az ellenőrzésnek az eredménye True érték.

Gyakran szükség van egy ciklus „abnormális” megszakítására, amikor néhányat végrehajtunk további feltétel. Ebben az esetben a cikluson belül az Exit:For service kifejezést kell használni, amelyet általában egy vezérlőkonstrukcióban helyeznek el, például:

Ha állapot, akkor Exit For

Ha a feltétel ellenőrzésének eredménye igaz, akkor a ciklus végrehajtása megszakad, és az operátor1 blokk újra végrehajtásra kerül, de az operátor2 blokk nem.

Do: Loop. Akkor használatos, ha a huroktörzs operátorainak ismétlődéseinek száma előre nem ismert. Ennek a kialakításnak négy változata van. Az első kettő használatakor a ciklus vagy sokszor, vagy egyáltalán nem kerül végrehajtásra.

Do Amíg feltétel ciklus utasítások

Ha a feltétel ellenőrzésének eredménye False, akkor az utasításblokk végrehajtásra kerül, ellenkező esetben az áttérés a Loop szolgáltatásszó után található utasításra történik. Másrészt, ha a feltétel első tesztje True eredményt ad vissza, akkor a ciklus még egyszer sem kerül végrehajtásra.

Do While Condition Loop utasításokat

Ha a feltétel igaz, akkor az utasításblokk végrehajtásra kerül, ha viszont hamis, vagyis az ellenőrzés eredménye False, akkor a ciklus még egyszer sem kerül végrehajtásra.

Ha az utolsó két konstrukciót használjuk, a ciklus legalább egyszer végrehajtásra kerül.

Végezze el az utasítások ciklusát az állapotig

Az utasításblokk addig fut, amíg a feltételteszt eredménye False, ellenkező esetben a ciklus véget ér.

Végezze el az utasítások ciklusát a feltétel alatt

Ha a feltétel hamis, akkor az utasításblokk végrehajtásra kerül, de ha igaz, akkor pl. Az ellenőrzés eredménye igaz, ekkor következik be a ciklus vége.

Míg hurok: Wend. Akkor is használatos, ha a ciklustörzs utasítások ismétlődéseinek száma előre nem ismert, és a következő szintaxissal rendelkezik:

Míg állapot Wend nyilatkozatok

Ha a feltétel ellenőrzésének eredménye True, akkor az utasításblokk végrehajtásra kerül, ellenkező esetben a Wend szolgáltatásszó után található utasításra történik az áttérés. Másrészt, ha a feltétel első tesztje False-t eredményez, akkor a ciklus még egyszer sem kerül végrehajtásra.

A ciklus egy algoritmikus struktúra melynek segítségével egy operátorblokk ismételt ismétlése valósul meg.

Hurokutasítás számlálóval (For... Következő)

A For...Next utasítás lehetővé teszi egy utasításkészlet (operátor) ciklikus végrehajtását meghatározott számú alkalommal. Utasítás szintaxisa:

Mert számláló = kezdő_érték Nak nek vég_érték

[utasítás]

[utasítás]

Következő [ számláló]

Paraméter számláló egy numerikus változó, amely automatikusan módosítja az értékét lépés a ciklus minden megismétlése után. A hurok addig fut számláló£ vég_érték pozitív paraméterértékkel lépés vagy addig számláló³ vég_érték negatív paraméterértékkel lépés. Így a ciklus még egyszer sem kerül végrehajtásra, ha pozitív lépésértékkel kezdő_érték több mint vég_érték. Ha a Step paraméter lépés ki van hagyva, akkor alapértelmezés szerint a számlálóváltozó növekménye 1-re van állítva.

Az Exit For utasítás „korán” lezárja a ciklust, és átadja a vezérlést a ciklus utasítást követő utasításra. Az Exit For általában feltételes utasításba kerül, például:

Ha feltétel Ezután Kilépés a For

Jegyzet. A For operátor szintaxisának megfelelően a paraméter számláló– tetszőleges típusú aritmetikai változó, mégis érdemesebb a változó teljes típusát használni, mivel egy valós típusú változó értékének tört része általában hibás. Ez összefügg azzal, ahogyan a számokat tárolják a számítógépben.

1. példa

Keresse meg az első összegét 10 természetes számok: S = 1 + 2 + 3 + …+ 10 . Programrészlet:

Dim I mint Integer, S mint Integer

S=0 " Állítsa vissza az S változó értékét

Ha i = 1-től 10-ig " A ciklus kezdete. Állítsa be a kezdő és a végértéket
"hurok paraméter. Az alapértelmezett cikluslépés az 1.

S = S + i " A hozzárendelési operátor minden alkalommal végrehajtásra kerül
"a hurok végrehajtása, be ebben a példában 10 alkalommal

Következő I " A ciklus vége. A hurokparaméter értéke egy lépéssel nő.

Ebben a programrészletben a ciklus pontosan 10-szer kerül végrehajtásra.

2. példa

Jelenítse meg a munkalap 1. oszlopában (a 2. sortól kezdve) az x értékeket a 0 és 3,2 közötti tartományban 0,4-es lépésekben.

Nyilvános allap()

Dim x As Single, i As Integer

x = 0 - 3,2 esetén 0,4 lépés

Bár az intervallum hosszát pontosan osztjuk 0,4-es lépésekkel, a munkalap eredménye a következő:

Mit kell tenni?

1. Kissé növelheti a végső értéket, ebben a példában 3,2 helyett 3,201-et írjon.

2. Határozza meg a chicle ismétlődéseinek számát, és írjon fel egy ciklust egész típusú számláló segítségével!

Ebben az esetben a program a következő formában jelenik meg:

Nyilvános allap1()

Dim x As Single, i As Integer, n As Integer

n = CInt((3,2 - 0) / 0,4)

i = 0 - n esetén 1. lépés

Cellák(i + 2, 1) = x

Loop utasítás For Each...Next

A For Each...Next ciklus lehetővé teszi egy utasításcsoport végrehajtásának megismétlését egy tömb vagy család minden egyes eleméhez. Ez az utasítás a következő szintaxissal rendelkezik:

Az egyes elem Ban ben csoport

[utasítás]

[utasítás]

Következő [ elem]

Paraméter elem egy olyan változó, amely egy család vagy tömb elemét jelöli. Érv csoport– a tömb vagy család neve. Az utasításokat csak egyszer hajtják végre minden csoporttag esetében. Az utasítás használata kényelmes, mert nem kell előre tudni, hány elem van a tömbben vagy a családban. Változó elem Variant típusúnak kell lennie.

1. példa

Keresse meg a kiválasztott tartomány összes elemének számtani átlagát

Nyilvános funkció átlaga (tartomány, mint tartomány) Dupla

Dim Element As Variant

Dim Mennyiség Dupla

Halvány mennyiség egész számként

Mennyiség = 0

A tartomány minden eleméhez

Összeg = Összeg + Elem

Mennyiség = Mennyiség + 1

Következő elem

Átlag = Összeg / Mennyiség

Alkalmazás. A szomszédos cellák kiválasztott tartományának számokat kell tartalmaznia. Az üres cellákban lévő számok 0-nak számítanak. A cellában lévő szöveg hibát eredményez.

A fent felsorolt ​​If... End If, Select... Case, For... Next, For Every... Next utasítások a parancsok végrehajtásának sorrendjét módosító vezérlőutasítások csoportját alkotják. A vezérlő utasítások tetszőleges sorrendben egymásba ágyazhatók.