Vba for next a következő értékre lép. Hurok a VBA-ban. Kilépés a hurokmegszakítás operátorból

28.03.2020 Tanácsot

Mert...Következő ciklus VBA Excel, szintaxisa és az egyes összetevők leírása. Példák a For...Next ciklus használatára.

A For...Next ciklus a VBA Excelben úgy van kialakítva, hogy utasítások csoportját a ciklusvezérlő változó - a számláló - által meghatározott számú alkalommal hajtsa végre. A ciklus végrehajtása során a számláló értéke minden iteráció után növekszik vagy csökken a Step utasítás kifejezésben megadott számmal, vagy alapértelmezés szerint eggyel. Ha olyan elemeket kell áthurcolnia, amelyek száma és indexe egy csoportban (tartomány, tömb, gyűjtemény) ismeretlen, használja a .

A ciklus szintaxisához...Következő

Számlálóhoz = eleje A végéhez [ Step step ] [ utasítások ] [ Kilépés For ] [ utasítások ] Következő [ számláló ] Számláló = eleje Vége [ Lépéslépés ] [ utasítások ] [ Kilépés For ] [ Kijelentések ] Következő [ számláló ]

BAN BEN szögletes zárójelek a For...Next ciklus opcionális attribútumai vannak megadva.

A For... Következő ciklus összetevői

Összetevő Leírás
számláló Kötelező attribútum. Számlálóként működő numerikus változó, amelyet hurokvezérlő változónak is neveznek.
Rajt Kötelező attribútum. Numerikus kifejezés, amely a számláló kezdeti értékét adja meg.
vége Kötelező attribútum. Numerikus kifejezés, amely a végső számlálóértéket adja meg.
Lépés* Nem kötelező attribútum. Egy utasítás, amely jelzi, hogy egy cikluslépést adnak meg.
lépés Nem kötelező attribútum. Numerikus kifejezés, amely meghatározza a cikluslépést. Lehet pozitív vagy negatív is.
nyilatkozatok Nem kötelező** attribútum. Operátorok a kódban.
Kilépés erre: Nem kötelező attribútum. Az operátor kilép egy ciklusból, mielőtt az véget ér.
Következő [számláló] Itt számláló- opcionális attribútum. Ez ugyanaz a hurokvezérlő változó neve, amely itt elhagyható.

*Ha attribútum Lépés hiányzik, a For...Next ciklus a következővel egyenlő alapértelmezett lépéssel kerül végrehajtásra 1 .

**Ha nem a saját kódját használja a ciklusban, a ciklus használatának értelme elvész.

Példák a For... Következő ciklusokra

A minta hurkokat másolhatja a VBA-modulba, egyenként futtathatja őket, és megtekintheti az eredményeket.

A legegyszerűbb ciklus

Töltse ki az aktív lap első oszlopának első tíz celláját Excel számokban 1-től 10-ig:

Alteszt1() Dim i As Long For i = 1-től 10 celláig (i, 1) = i Következő Vég Sub

A legegyszerűbb ciklus lépésekkel

Az előző ciklushoz hozzáadtunk egy 3 értékű Step operátort, és az eredményeket a második oszlopba írjuk:

Alteszt2() Dim i Amíg i = 1-től 10-ig 3. lépés Cells(i, 2) = i Következő Vég Sub

Hurok negatív érvekkel

Ez a ciklus fordított sorrendben tölti ki a harmadik oszlop első tíz celláját:

Alteszt3() Dim i Amíg i = 0-tól -9-ig Lépés -1 Cells(i + 10, 3) = i + 10 Következő Vég Al

A lépések méretét -3-ra növeljük, és az eredményeket az aktív Excel munkalap negyedik oszlopába írjuk:

Alteszt4() Dim i Amíg i = 0 - -9 Lépés -3 Cells(i + 10, 4) = i + 10 Következő Vég Al

Beágyazott hurok

A külső ciklus szekvenciálisan beállítja az aktív lap első tíz sorának indexeit, a beágyazott ciklus pedig összeadja a sor első négy cellájában lévő számokat az aktuális indexszel, és az összeget az ötödik oszlop cellájába írja. Mielőtt beágyazott ciklust kezdenénk kumulatív összeadással, alaphelyzetbe állítjuk a megfelelő sor ötödik celláját, hogy ha van benne szám, az ne kerüljön hozzáadásra az összeghez.

Alteszt5() Dim i1 As Long, i2 As Long For i1 = 1 to 10 "Hozzárendelje az ötödik cellát az i1 sorban 0 Cells(i1, 5) = 0 For i2 = 1 - 4 Cells(i1, 5) = Cells( i1 , 5) + Cells(i1, i2) Következő Következő Vége Sub

Kilépés a hurokból

Az aktív lap hatodik oszlopába tíz állat nevét írjuk, természetesen a For... Next ciklus segítségével:

Alteszt6() Dim i As Long For i = 1-től 10 celláig (i, 6) = Choose(i, "Medve", "Elefánt", "Zsiráf", "Antilop", _ "Krokodil", "Zebra", "Tigris", "Gyík", "Oroszlán", "Víló") Következő Vég Sub

A következő hurok a hatodik oszlopban egy krokodilt fog keresni, aki kalifornit evett. A hetedik oszlop cellájába a hurok a „Volt itt hurok” sort, amíg nem találkozik egy krokodillal, és amikor talál egy krokodilt, „Megette a galóst”, és leállítja a munkát a Kilépés végrehajtásával. Parancsra. Ez látható lesz a krokodil alatti állatok neve melletti cellákban, amelyek nem tartalmazzák a „Volt itt egy ciklus” szöveget.

Alteszt7() Dim i As Long For i = 1-től 10-ig, ha Cells(i, 6) = "Krokodil" Akkor Cells(i, 7) = "Megette a galóst" Kilépés Else Cells(i, 7) = " Itt volt egy ciklus: "Engedd, ha következőnek vége End Sub

Az ilyen adatok aktívak Excel lap akkor kap, ha szekvenciálisan futtatja a VBA szerkesztőben mind a hét szubrutin a For...Next ciklusok működését bemutató példákból.

Hurok tört argumentumokkal

A start, end és step attribútumok ábrázolhatók számmal, változóval vagy numerikus kifejezéssel:

Ha i = 1-től 20-ig, 2. lépés: i = a - b-ig c. lépés: i = a - 3 - 3 - 2b + 1 lépés c/2

A cikluson kívüli változó vagy a benne lévő kifejezés értékének kiszámítása tört eredményt eredményezhet. A VBA Excel egész számra kerekíti a következő használatával:

"Attribútumértékek kerekítés előtt i = 1,5-től 10,5-ig 2,51 lépéshez "Attribútumértékek kerekítése i = 2-től 10-ig 3. lépés

Próbáljon meg nem engedni kerekítetlen argumentumértékeket a For...Next ciklus törzsébe, hogy ne kapjon előre nem látható eredményeket a végrehajtása során. Ha nem nélkülözheti a törtszámokat, de rendszeres kerekítést kell használnia, használja ezt a kódban VBA funkció munkalap WorksheetFunction.Round a szám kerekítéséhez, mielőtt a For...Next ciklusban használná.

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 segítségével lehet megtenni kulcsszó 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))

Ciklus ismétlődően végrehajtott utasítások csoportja. A VBA-ban a ciklusok szervezéséhez, azaz egy vagy több utasítás ismételt végrehajtásához két fő csoportot használhat: a For...Next felsorolású ciklusokat és a Do... Loop feltételű ciklusokat. Két fajta létezik Mert...Következő(For-Next és For Each-Next) és kétféle hurok Csináld...Loop(Do While...Loop és Do Until...Loop), amelyek különböznek a tesztelt állapot típusától függően.

For-Next Loop

A VBA leggyakoribb ciklusa a For-Next enum ciklus. Ennek a ciklusnak meg kell határoznia azokat a határokat (kezdeti és végső számlálóértékeket), amelyeken belül a hurokváltozó megváltozik.

A ciklus utasítás szintaxisa a következő:
Mert Mert n=1)
Hogy Végső érték ( Hogy 10)
Lépés Növekedés ( Lépés 2)

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

Itt a változó egy számláló, a változó értéke a ciklus minden iterációjával nő vagy csökken. Ha nincs lépés a hurokkonstrukcióban, akkor a növekmény 1 (alapértelmezett). Ahhoz, hogy egy ciklusutasításból korán kilépjünk, pl. Mielőtt a számláló elérné a végső értéket, az operátort be kell vezetni a hurokkonstrukcióba Kilépés erre:.

Figyelembe véve a Kilépés erre: A ciklus utasítás szintaxisa a következő:
Mert számláló = Kezdő érték(például pl. Mert n=1)
Hogy Végső érték ( Hogy 10)
Lépés Növekedés ( Lépés 2)
[Utasítások] vagy [Kezelői blokk]
Kilépés erre:
Következő[számláló]

Homogén objektumok vagy tömbök egy csoportjának feldolgozásához a következő hurokkonstrukciót kell használni:
Az egyes Elem Ban ben Csoport (hasonló objektumok csoportjának neve)
[Utasítások] vagy [Kezelői blokk]
Kilépés erre:
Következő elem

Hurok a Do While...Loop és a Do Until...Loop feltétellel

A Do While...Loop utasítás addig ciklusokat hajt végre, amíg egy meghatározott feltétel teljesül. Meg kell jegyezni, hogy a feltétel ellenőrzése az utasítás vagy utasításcsoport végrehajtása előtt megtörténik.

Ebben az esetben a Do While...Loop utasítások szintaxisa a következő:
Csinálni, miközben feltétel (például x<20)
[Utasítások] vagy [Kezelői blokk]
Kilépés a Do
Hurok


Tedd
[Utasítások] vagy [Kezelői blokk]
Kilépés a Do
Loop While feltétel

A Do Until...Loop utasítás addig ciklusokat hajt végre, amíg egy feltétel teljesül, és amikor a feltétel teljesül, az utasítás kilép a ciklusból. A feltétel ellenőrzése egy utasítás vagy utasításcsoport végrehajtása előtt történik.

Ebben az esetben a Do Until...Loop ciklusoperátorok szintaxisa a következő:
Tedd Amíg feltétel (például x=20)
[Utasítások] vagy [Kezelői blokk]
Kilépés a Do
Hurok

Ha ellenőriznie kell egy feltételt, miután utasításokat vagy utasításblokkokat legalább egyszer végrehajtott, akkor a következő ciklusoperátor-konstrukciót használhatja:
Tedd
[Utasítások] vagy [Kezelői blokk]
Kilépés a Do
Loop Amíg feltétel

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ármilyen numerikus kifejezés, és meghatározza a Számláló változó kezdeti értékét.

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. A Következő kulcsszó utáni opcionális Számláló változónak meg kell egyeznie a For kulcsszó után a ciklusstruktúra elején megadott Számláló változóval.

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.

Ez a lecke a hurokkal végzett munkáról szól. Mert VBA-ban. Példa a For hurokkal való munkára, valamint egy példa képletek létrehozására az Excelben makrók használatával.

Ciklus Mert számláló elvén működik. Mert olyan esetekben használatos, amikor bizonyos műveleteket előre meghatározott számú alkalommal meg kell ismételni. Például egy ciklus Mert gyakran használják tömbök olvasásakor.

Ciklus Mert a következő szintaxissal rendelkezik:
Mert számláló = ciklus kezdete Nak nek ciklus vége [Lépés lépés]
operátorok csoportja, csapatok stb.
Kilépés erre:
Következő számláló

  • "számláló" - egy változó, amely a megadottra változik "lépés". Ha a lépés nincs megadva, akkor az alapértelmezett egy.
  • "ciklus kezdete", "ciklus vége" - számok vagy változók, amelyek a számláló alsó és felső határát jelzik. A ciklus leáll, amikor "számláló" >"ciklus vége" ( vagy ha a ciklus megfordul, pl. -1-es lépésekben, akkor "számláló"< "ciklus vége").
  • Kilépés erre: parancs a ciklus leállítására. Olyan esetekben használják, amikor valamilyen esemény történt, amely után le kell állítani a parancsok végrehajtását a hurokban, vagy meg kell akadályozni a hiba előfordulását.

Nézzünk néhány példát a hurok használatára Mert. A jövőben elég gyakran fogunk találkozni ezzel a ciklussal.

1. példa
Adott két számokkal kitöltött C és E oszlop:

Össze kell adnia a C oszlopban lévő számokat az E oszlopban lévő számokkal az alábbiak szerint:
C2+E21, C3+E20, ..., C21+E2. Az eredményt a D oszlopban jelenítse meg képlet formájában, pl. Az eredménycella tartalma "=C2+E21".

A makrókód így néz ki (olvassa el, hol kell írni a kódot):

Alatti Loop_For()
"egy konstans, amely a hurok határát jelzi, azaz milyen értékig futnia kell a huroknak
Const n = 21
Mert i=2 Nak nek n
"hozzon létre egy képletkarakterláncot, és mentse el egy cellába
Cells(i, 4) = "=C" & CStr(i) és "+E" & CStr((n - i) + 2)
"folytatás ciklusban történő végrehajtáskor
Következőén
" a programkód többi része
Vége Sub

Elemezzük az írott kódot:

  • Const n = 21 - a 21 értékű n állandó leírása, azaz. sorok száma, amelyen a huroknak át kell mennie Mert;
  • Mert i=2 Nak nek n - i egy számláló, amely 1-gyel változik a hurok minden egyes lépésével. A számláló 2-vel kezdődik, és akkor ér véget, amikor i>n;
  • Cells(i, 4) - cella kiosztott lap, i a sor száma, 4 az oszlop száma, amelyben az eredmény megjelenik. Figyeljük meg, hogy az i számlálónk az Excel munkalap sorszámát jelzi;
  • Következő i- operátort a hurok bezárásához és a mutató mozgatásához Mert. Minden a kettő között MertÉs Következő ciklusban végrehajtva;
  • CStr- függvény, amely egy számot szöveggé alakít.

A cellához rendelünk egy képletet, amelyet a következőképpen állítunk elő: "=C" & CStr(i) és "+E" & CStr((n - i) + 2). A & jel a karakterek és karakterláncok „ragasztása”. Ennek eredményeként a „=Сn+E((n - i) + 2)” képletet kapjuk, ahol n = 21, i a számláló.
Ijedős? csak úgy tűnik :)

Minden. A makró végrehajtása után a következő oszlopot kapjuk (kiemelve), és minden cellában a képletet:

2. példa
Most tekintsünk egy hurkot a megadott lépéssel. Az utolsó makró kiszámítása után három oszlopot kaptunk, most ki kell vonni D-t az E oszlopból és az F oszlopban megjeleníteni a kivonási képleteket. A makrókód a következő:

Alatti Loop_For_with_step()
Const n = 21
Mert i = n Nak nek 2 Lépés -1
Cells(i, 6) = "=E" & CStr(i)&"-D"& CStr(én)
Következőén
Vége Sub

Ebben az esetben minden ugyanaz, csak a ciklus most nem 2-ről, hanem 21-ről 2-re „fut” a -1 lépéssel.
A végrehajtás eredménye a következő lesz:

Ciklus Mert, a VBA-ban nem az egyetlen ciklus. A jövőben megfontolunk még néhány lehetőséget a ciklusokhoz, amelyek nélkül nem tud makróparancsokat írni Excelben.