Operatori petlje u vba. VBA petlje. Izjave Continue i Exit

28.03.2020 Vijesti

Algoritam For….Next ciklusa prikazan je na sl. 5.28.

Brojač – bilo koja VBA numerička varijabla, obično Integer ili Long varijabla.

Početak - bilo koji brojčani izraz određuje početna vrijednost za varijablu Brojač.

Kraj – numerički izraz koji određuje konačnu vrijednost za varijablu Brojač .

Izjave – jedan, više ili nijedan operator. Ovi iskazi izvršavaju tijelo petlje. VBA izvršava svaki od ovih iskaza svaki put kada se petlja izvrši.

Ključna riječ Sljedeći

Brojač=brojač+StepSise

Sl.9.28. Za….Algoritam sljedeće petlje

Ključna riječ Sljedeći govori VBA da je dosegnut kraj petlje. Izborna varijabla brojača nakon ključna riječ Sljedeća mora biti ista varijabla brojača koja je navedena nakon ključne riječi For na početku strukture petlje.

Sintaksa:

Za brojač = od početka do kraja

Prilikom izvođenja petljeZaSljedeći VBAodvija se na sljedeći način:

Dodjeljuje vrijednost koju predstavlja Zvijezda , varijabla S teta .

Izvršava sve naredbe predstavljene s Izjave dok ne dođe do ključne riječi Sljedeći . Ključna riječ Sljedeći pokazuje VBA da je dosegnut kraj tijela petlje.

Modificira varijablu S teta po iznosu StepSize (ako je uključena neobavezna riječ Step) Ako Step nije definiran, tada VBA povećava varijablu brojača za 1.

Vraća se na početak petlje i uspoređuje trenutnu vrijednost varijable S teta s vrijednošću predstavljenom End. Ako vrijednost S teta manje od vrijednosti Kraj , VBA nastavlja s izvršenjem od prve naredbe nakon ključne riječi Sljedeći .

9.2.4. I/O jednodimenzionalnih i dvodimenzionalnih nizova

Niz (niz) je skup varijabli koje imaju zajedničko ime i osnovni tip. Niz je prikladan način za pohranu više povezanih podatkovnih stavki u jednom spremniku za veću praktičnost i učinkovitost programiranja. Svi podatkovni elementi pohranjeni u nizu moraju biti istog tipa.

Niz vam omogućuje pohranjivanje i manipuliranje mnogim elementima podataka putem jedne varijable. Osim smanjenja ukupnog broja različitih naziva varijabli koje je potrebno pratiti, druga glavna prednost korištenja nizova je da se petlje mogu koristiti za jednostavnu obradu različitih elemenata niza. Kombiniranjem nizova i struktura petlje (obično For....Next), možete napisati mali broj izjava koje obrađuju veliku količinu podataka. Obavljanje istih zadataka korištenjem pojedinačnih varijabli može zahtijevati pisanje stotina izjava.

Dimenzija polja

Programski jezici obično koriste jednodimenzionalne i višedimenzionalne nizove, od kojih neki opisuju relativno jednostavne, a drugi složenije objekte.

Jednodimenzionalni nizovi

Primjer jednodimenzionalnog niza dan je u tablici br. 9.9.

Tablica br. 9.9

U programiranju se obično koristi numeriranje temeljeno na nuli.

Za pristup podacima pohranjenim u određenom elementu niza, morate navesti naziv niza iza kojeg slijedi broj koji se naziva indeks elementa. Indeks se nalazi u zagradama. Na primjer, ako je polje u tablici #1.1 nazvano DoubleArray, tada sljedeća izjava dodjeljuje broj 45 varijabli DoubleAny.

DoubleAny = DoubleArray (3)

U ovoj izjavi, broj 3 je indeks niza. Budući da numeriranje elemenata počinje od nule, element na koji se referira operator zapravo je četvrti element DoubleArray-a.

Prilikom izvršavanja naredbe DoubleArray, VBA odabire vrijednost 45 i pohranjuje tu vrijednost u varijablu DoubleArray.

Isti se operator može koristiti pri pohranjivanju podataka u nizu:

DoubleArray (5)=12.

Kada se ova naredba izvrši, VBA postavlja vrijednost 12 u navedeni element niza, zamjenjujući prethodni sadržaj tog elementa.

Jednodimenzionalni nizovi obično se koriste za predstavljanje raznih popisa podataka.

Višedimenzionalni nizovi

Kada je potrebno predstaviti podatkovne tablice s podacima organiziranim u formatu redaka i stupaca, za to se koriste višedimenzionalni nizovi.

U dvodimenzionalnom nizu, adresa svake ćelije sastoji se od dva broja: broja retka (prvi indeks) i broja stupca (drugi indeks). U VBA možete stvoriti nizove do 60 dimenzija.

Ako se broj elemenata u nizu ne mijenja, tada se takav niz naziva statičnim.

Statički i dinamički nizovi

Ako prilikom izvođenja VBA programa možete promijeniti broj elemenata u nizu, tada se takvi nizovi nazivaju dinamičkim. Za promjenu veličine dinamičkog niza upotrijebite operator ReDim.

VBA održava rezervirano područje memorije za sve elemente u nizu sve dok postoji varijabla vrste polja. Takvi se nizovi nazivaju statičnim jer se broj elemenata u nizu ne mijenja.

OperaterOpcija Baza

Obično VBA koristi nizove temeljene na nuli. Operator Option Base omogućuje vam da navedete 0 ili 1 kao zadano sjeme za indekse polja. Ako operater Opcija Baza ne koristi se, VBA počinje numeriranje indeksa od 0 (zadano). Naredbu Option Base morate smjestiti u područje deklaracije modula prije deklariranja bilo koje varijable, konstante ili procedure. Ne možete smjestiti iskaz Option Base unutar procedure. Možete imati samo jednu Option Base izjavu po modulu.

Sintaksa:

Opcija Baza 0|1

Deklariranje nizova

Deklariranje niza pomoću operatora Dim ima sljedeću sintaksu.

Sintaksa:

DimVarName()

Dim VarName ( gornji, gornji]….)[ Kao tip],

VarName – bilo koji naziv za niz koji zadovoljava VBA pravila za imenovanje identifikatora.

Indeksi – dimenzija niza.

Kao vrsta - tip podataka.

Lower – donja granica vrijednosti indeksa.

Upper – gornja granica vrijednosti indeksa.

Vrsta – vrsta podataka

Ako izostavite tip, svi elementi niza bit će tipa Variant. VBA inicijalizira elemente numeričkih nizova u nule i elemente nizova nizova u prazne nizove.

Dim str_array (1 do 100) Kao niz

Dim variant_array()

Dim str_Množenje (0 do 15, 0 do 15) kao niz

Korištenje polja

Da biste pristupili elementu niza, morate navesti naziv niza nakon kojeg slijedi vrijednost indeksa, u zagradama.

Upućivanje na element niza ima sljedeću sintaksu.

Sintaksa.

arrayName(validIndex1, ….)

validIndex – ime niza.

validIndex1 – važeća vrijednost indeksa za prvu dimenziju niza.

validIndex2 – važeća vrijednost indeksa za drugu dimenziju niza.

Morate dati vrijednost indeksa za svaku dimenziju niza kad god pristupite bilo kojem elementu niza.

I/O jednodimenzionalnih nizova

Kada unosite jednodimenzionalni niz, morate redom unijeti 1., 2. itd. elementi niza postupaju slično prilikom ispisivanja. Za unos ili izlaz niza morate organizirati petlju. Najprikladniji način za unos i izlaz jednodimenzionalnog niza je korištenje algoritma koji koristi bezuvjetnu petlju.

Ulazno/izlazni algoritam za jednodimenzionalni niz prikazan je na slici 5.29.

Postupak je objašnjen u nastavku.

Sub Massiv() – naziv procedure.

Dim Mas (5) As Integer - deklariran jednodimenzionalni niz od 5 elemenata, vrsta brojeva je cijeli broj.

Dim s As String – deklarirana radna varijabla za konačni ispis podataka iz polja u dijaloškom okviru. As String – tip podataka u varijabli za pohranu.

For i = 1 To 5 – postupak u prvoj petlji For….Next uzima cijele brojeve od 1 do 5 i stavlja ih u niz.

Mas (i) = InputBox (i) – unos cijelog broja za i-ti element.

Dalje – prijelaz na drugi ciklus (elementi niza se unose u red i prikazuju u dijaloškom okviru pomoću operatora MsgBox).

Za i = 1 do 5 – elementi u redu od 1 do 5.

s = s & Mas(i) & “ ;” - formiranje niza od elemenata niza. Niz se ispisuje u jednom redu. Elementi niza su odvojeni znakom “;”.

MsgBox s – izlaz prethodno unesenog polja.

Sl.5.27. Jednodimenzionalni input-output algoritam

Riža. 9.29. Algoritam i postupak za ulaz-izlaz jednodimenzionalnog niza

2D Array I/O

Algoritam i postupak za unos i izlaz dvodimenzionalnog niza prikazan je na slici 5.30.

Opis ovog postupka:

Sub Massiv() – naziv procedure

Deklaracija varijabli koje se koriste u ovoj proceduri:

Dim Mas (5, 5) Kao Integer - deklariran dvodimenzionalni niz s 5 stupaca i pet redaka, vrsta brojeva je cijeli broj.

Dim s As String – deklarirana radna varijabla za konačni ispis podataka iz polja u dijaloškom okviru. As String – tip podataka u varijabli za pohranu

Sljedeći i – kraj operacije dodjele varijabli

Unos elemenata niza u memoriju računala:

Za i = 1 do 5 – unos se vrši iz prvog elementa prve linije, zatim iz druge, itd.

Za j = 1 do 5 do kraja prvog retka, zatim od prvog elementa drugog retka, itd.

Mas(i,j) = InputBox(i,j) – operator za unos elemenata niza u memoriju računala

Riža. 9.30. Algoritam i postupak za ulaz-izlaz dvodimenzionalnog niza

Algoritmi sređivanja nizova

Kao primjer dajemo algoritam i proceduru sortiranja jednodimenzionalnog niza metodom “mjehurića”.

Ispis elemenata unesenog niza iz memorije računala:

Za i = 1 do 5 – izlaz se provodi na isti način kao i ulaz

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

s = s & Chr (13) – novi red (izlaz ne u jednom redu, već u nekoliko, kao u ulaznom nizu)

Next i – kraj operatora For….Next

MsgBox s – izlaz prethodno unesenog niza u dijaloški okvir

End Sub – kraj postupka.

Petlje vam omogućuju da izvršite jedan ili više redaka koda više puta. VBA podržava sljedeće petlje:

For...Next For Every...Next Do... Loop

For konstrukcija. . . Sljedeći. Kada je broj ponavljanja poznat unaprijed, koristi se For petlja. . . Sljedeći. For petlja koristi varijablu koja se zove varijabla petlje ili brojač petlje, koja se povećava ili smanjuje za određeni iznos svaki put kada se petlja ponavlja. Sintaksa za ovu konstrukciju je sljedeća:

Za operatore counter = start To end Next

Parametri brojača, početka, kraja i povećanja su numerički.

Bilješka. Parametar povećanja može biti pozitivan ili negativan. Ako je pozitivan, početni parametar mora biti manji ili jednak krajnjem parametru, inače se petlja neće izvršiti. Ako je inkrement negativan, tada početak mora biti veći ili jednak kraju da bi se tijelo petlje izvršilo. Ako parametar Step nije naveden, zadana vrijednost parametra inkrementa je 1.

VBA izvršava petlju For u sljedećem nizu:

1. Postavlja vrijednost brojača varijable petlje za početak.

2. Uspoređuje vrijednost brojača varijable petlje i vrijednost krajnjeg parametra. Ako je brojač veći, VBA završava petlju. (Ako je inkrement negativan, VBA prestaje izvršavati petlju ako je vrijednost brojača varijable petlje manja od vrijednosti kraja.)

3. Izvršava naredbe u tijelu petlje naredbi.

4. Povećava vrijednost brojača varijable petlje za 1 ili za vrijednost parametra povećanja, ako je navedeno.

5. Ponavlja korake od 2 do 4.

Razmotrite primjer: Izračunajte vrijednost funkcije f(t)

za dane a, b, n, ako se t mijenja iz a u b s korakom Dt=(b-a)/(n-1).

Podprimjer3() 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) : Read 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)") Za i = 1 Do n - 1 t = t + dt Ako t<= -1 Then f(i) = -1 ElseIf t >1 Tada je f(i) = 1 Else f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Call out out("c" & (2 + i), f(i)) Next i End Sub

Za svaki konstrukt. . . Sljedeći

Za svaku petlju. . . Next je sličan For petlji. . . Dalje, ali ponavlja grupu iskaza za svaki element iz skupa objekata ili iz niza, umjesto ponavljanja iskaza određeni broj puta. Posebno je koristan kada se ne zna koliko elemenata ima skup.

Sintaksa konstrukcije petlje za svaki. . . Sljedeće je:

Za svaki element U izjavama grupe Sljedeći element

Imajte na umu sljedeća ograničenja kada koristite petlju Za svaki. . . Sljedeći:

Za skupove, parametar elementa može biti samo varijabla tipa varijanta, generička varijabla tipa objekt ili objekt naveden u Pregledniku objekata

Za nizove, parametar elementa može biti samo varijabla tipa Variant

Ne možete koristiti petlju za svaki. . . Zatim s nizom koji ima korisnički definirani tip jer varijabla tipa varijanta ne može sadržavati vrijednost korisnički definiranog tipa

Do...Loop dizajn

Do petlja se može koristiti za izvršavanje bloka naredbi neograničen broj puta. Postoji nekoliko varijanti dizajna Do. . . Petlja, ali svaki od njih procjenjuje izraz uvjeta kako bi odredio kada izaći iz petlje. Kao i kod konstrukcije If. . . Tada uvjet mora biti vrijednost ili izraz koji daje vrijednost False (nula) ili True (ne nula).

U sljedećoj konstrukciji Do. . . Izjave petlje se izvršavaju sve dok je vrijednost uvjeta True:

Naredbe petlje uvjeta Do While

Prilikom izvođenja ove petlje, VBA prvo provjerava uvjet. Ako je uvjet False, preskače sve izjave petlje. Ako je True, VBA izvršava naredbe petlje, vraća se na naredbu Do While i ponovno testira uvjet.

Stoga se petlja predstavljena ovom konstrukcijom može izvršiti bilo koji broj puta sve dok vrijednost uvjeta nije nula ili True. Imajte na umu da se naredbe tijela petlje ne izvršavaju niti jednom ako se prvi put kada se uvjet provjeri, ispostavi da je netočan.

Razmotrite primjer: Izračunajte zbroj niza

sa zadanom točnošću.

Podprimjer4() Dim e As Single, x Kao Single, s Kao Single Dim m As Single, p Kao Single, i Kao Single Poziv read("a1", x) : Poziv 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)) : Call out("c" & (2 + i), s) i = i + 1 Loop End Sub

Još jedna varijanta Do dizajna. . . Petlja prvo izvršava naredbe tijela petlje, a zatim provjerava uvjet nakon svakog izvođenja. Ova varijacija osigurava da se izjave tijela petlje izvode barem jednom:

Do izjave Loop While uvjet

Druge dvije varijante konstrukcije petlje slične su prethodnima, osim što se petlja izvršava dok je uvjet lažan:

Petlja se uopće ne izvršava ili se izvodi mnogo puta:

Do uvjeta

Operatori petlje

Petlja se izvodi najmanje jednom:

operateri

Uvjet petlje do

7.2 Ugniježđene petlje.

Kontrolne strukture možete postaviti unutar drugih kontrolnih struktura (na primjer, blok If...Then unutar petlje For...Next). Za kontrolnu strukturu smještenu unutar druge kontrolne strukture kaže se da je ugniježđena.

Dubina ugniježđivanja kontrolnih struktura u VBA nije ograničena. Kako bi se poboljšala čitljivost koda, usvojena je praksa pomicanja tijela konstrukcije ili petlje za donošenje odluka u programu kada se koriste ugniježđene kontrolne strukture.

Kada je jedna ili više drugih petlji ugniježđeno unutar petlje, govorimo o ugniježđenim petljama, koje razlikuju vanjske (obuhvatne) i unutarnje (ugniježđene) petlje.

Razmotrimo primjer zbrajanja elemenata Aij matrice A(n,m) red po red.

Podprimjer5() Dim a() As Single, s() As Single Dim n As Integer, m As Integer Dim i As Integer, j As Integer Poziv read("a1", n): Poziv read("b1", m ) ReDim a(1 To n, 1 To m), s(1 To n) "Očitaj matricu Za i = 1 To n Za j = 1 To m Pozovi readcell(i + 1, j, a(i, j)) Sljedeće j Sljedeće i "Izračun Za i = 1 Na n s(i) = 0 Za j = 1 Na m s(i) = s(i) + a(i, j) Sljedeće j Poziv outcell(i + 1, m + 1) , s(i)) Sljedeći i Kraj Sub

Imajte na umu da prva Next naredba zatvara unutarnju For petlju, a zadnja Next naredba zatvara vanjsku For petlju. Isto tako, za ugniježđene If naredbe, End If naredbe automatski se primjenjuju za zatvaranje najbliže If naredbe. Ugniježđene Do strukture. . . Petlje rade na sličan način: najudaljenija naredba Loop odgovara najdaljoj naredbi Do.

Prilikom unosa/povlačenja elemenata dvodimenzionalni niz na radni list Microsoft Excel Pogodno je koristiti prilagođene I/O procedure:

Sub readcell(i As Integer, j As Integer, val As Variant) val = Sheet1.Cells(i, j).Value End Sub Sub Outcell(i As Integer, j As Integer, val As Variant) Sheet1.Cells(i, j).Vrijednost = val End Sub

gdje je I broj retka, j je broj stupca radnog lista.

Izlaz iz kontrolnih struktura

Naredba Exit omogućuje izravan izlaz iz For petlje, Do petlje, Sub procedure ili Function procedure. Sintaksa naredbe Exit je jednostavna:

Za brojač = početak Za kraj [blok naredbi] [blok naredbi] Sljedeće Do [(While | Until) uvjet] [blok naredbi] [blok naredbi] Petlja

Izlaz za unutar petlje For i Exit Do unutar petlje Do može se pojaviti neograničeni broj puta.

Naredba Exit Do radi sa svim varijacijama sintakse petlje Do.

Naredbe Exit For i Exit Do koriste se kada želite odmah prekinuti petlju bez nastavka daljnjih iteracija ili čekanja da se blok naredbi u tijelu petlje završi.

Kada koristite naredbu Exit za izlazak iz petlje, vrijednosti varijable petlje ovise o tome kako petlja završava:

Kada petlja završi normalno, vrijednost varijable petlje je za jedan veća od gornje granice broja petlji

Kada se petlja prerano prekine, varijabla petlje zadržava svoju vrijednost koju je primila prema uobičajenim pravilima

Kada petlja završi na kraju skupa, varijabla petlje je Ništa ako je varijabla tipa object ili Prazna ako je varijabla tipa Variant

Postoje situacije kada VBA program mora izvršiti isti skup akcija nekoliko puta zaredom (to jest, ponoviti isti blok koda nekoliko puta). To se može učiniti pomoću VBA petlji.

Naredba za petlju u Visual Basicu

Struktura iskaza petlje Za V Visual Basic može se organizirati u jednom od dva oblika: kao petlja Za… Dalje ili poput ciklusa Za svakoga.

Ciklus “Za...Dalje”

Ciklus Za… Dalje koristi varijablu koja uzastopno uzima vrijednosti iz zadanog raspona. Sa svakom promjenom vrijednosti varijable izvode se akcije sadržane u tijelu petlje. To je lako razumjeti iz jednostavnog primjera:

Za i = 1 do 10 Ukupno = Ukupno + iArray(i) Sljedeći i

U ovoj jednostavnoj petlji Za… Dalje koristi se varijabla ja, koji sekvencijalno uzima vrijednosti 1, 2, 3, ... 10, a za svaku od ovih vrijednosti se izvršava VBA kod unutar petlje. Dakle, ova petlja zbraja elemente niza iArray u varijabli Ukupno.

U gornjem primjeru, korak povećanja petlje nije naveden, kako bi se povećala varijabla ja Od 1 do 10 zadana vrijednost je povećanje 1 . Međutim, u nekim slučajevima potrebno je koristiti različite vrijednosti povećanja za petlju. To se može učiniti pomoću ključne riječi Korak, kao što je prikazano u sljedećem jednostavnom primjeru.

Za d = 0 do 10 Korak 0.1 dUkupno = dUkupno + d Sljedeći d

Budući da je u gornjem primjeru korak povećanja postavljen na 0.1 , zatim varijabla dUkupno za svako ponavljanje ciklusa uzima vrijednosti 0,0, 0,1, 0,2, 0,3, ... 9,9, 10,0.

Da biste odredili korak petlje u VBA, možete koristiti negativnu vrijednost, na primjer, ovako:

Za i = 10 do 1 korak -1 iArray(i) = i Sljedeći i

Ovdje je korak povećanja -1 , dakle varijabla ja svakim ponavljanjem ciklusa poprima vrijednosti 10, 9, 8, ... 1.

Za svaku petlju

Ciklus Za svakoga izgleda kao ciklus Za… Dalje, ali umjesto petlje kroz niz vrijednosti za varijablu brojača Za svakoga izvodi skup akcija za svaki objekt u određenoj grupi objekata. U sljedećem primjeru, korištenjem petlje Za svakoga Ispisani su svi listovi u trenutnom listu radna bilježnica Excel:

Dim wSheet kao radni list za svaki wSheet u radnim listovima MsgBox "Sheet Found: " & wSheet.Name Next wSheet

Izlaz za operatora prekida petlje

Operater Izlaz za koristi se za prekid ciklusa. Čim se ova naredba naiđe u kodu, program završava izvršavanje petlje i nastavlja izvršavati naredbe koje se nalaze u kodu odmah nakon ove petlje. To se može koristiti, na primjer, za traženje određene vrijednosti u nizu. Da biste to učinili, upotrijebite petlju za pregled svakog elementa niza. Nakon što je traženi element pronađen, nema potrebe pregledavati ostatak - ciklus se prekida.

Aplikacija operatera Izlaz za prikazano u sljedećem primjeru. Ovdje petlja prolazi kroz 100 unosa polja i uspoređuje svaki s vrijednošću varijable dVal. Ako se pronađe podudaranje, petlja se prekida:

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Do While petlja u Visual Basicu

Ciklus Radite dok izvršava blok koda sve dok je ispunjen zadani uvjet. Slijedi primjer postupka Pod, u kojem, pomoću petlje Radite dok Fibonaccijevi brojevi koji ne prelaze 1000 prikazani su u nizu:

"Sub procedura ispisuje Fibonaccijeve brojeve koji ne prelaze 1000 Sub Fibonacci() Dim i As Integer "brojač za označavanje položaja elementa u nizu Dim iFib As Integer "pohranjuje trenutnu vrijednost niza Dim iFib_Next As Integer "pohranjuje sljedeća vrijednost niza Dim iStep As Integer "pohranjuje veličinu sljedećeg inkrementa "inicijalizira varijable i i iFib_Next i = 1 iFib_Next = 0 "Do While petlja će se izvoditi dok vrijednost "trenutačnog Fibonaccijevog broja ne prijeđe 1000 Do Dok je 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

U navedenom primjeru uvjet iFib_Dalje< 1000 provjeriti na početku ciklusa. Stoga, ako je prva vrijednost iFib_Dalje Da je više od 1000, tada se petlja ne bi izvršila niti jednom.

Drugi način implementacije petlje Radite dok– postavite uvjet ne na početak, već na kraj petlje. U ovom slučaju, petlja će se izvršiti barem jednom, bez obzira na to je li uvjet istinit.

Shematski takav ciklus Radite dok uz provjeru uvjeta na kraju izgledat će ovako:

Do...Loop While iFib_Next< 1000

Do petlje u Visual Basicu

Ciklus Učinite Do vrlo sličan ciklusu Radite dok: Blok koda u tijelu petlje izvodi se iznova i iznova dok se ne zadovolji navedeni uvjet (rezultat uvjetnog izraza je Pravi). U sljedećem postupku Pod pomoću petlje Učinite Do izvlači vrijednosti iz svih ćelija u stupcu A radni list dok se u stupcu ne naiđe na praznu ćeliju:

IRow = 1 Do IsEmpty(Cells(iRow, 1)) "Vrijednost trenutna ćelija pohranjeno u nizu dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Vrijednost iRow = iRow + 1 petlja

U gornjem primjeru uvjet Prazna je (ćelije (iRow, 1)) nalazi se na početku strukture Učinite Do, stoga će se petlja izvršiti barem jednom ako prva uzeta ćelija nije prazna.

Međutim, kao što je pokazano u primjerima petlje Radite dok, u nekim situacijama želite da se petlja izvrši barem jednom, bez obzira na početni rezultat uvjetnog izraza. U ovom slučaju, uvjetni izraz treba staviti na kraj petlje, ovako:

Uradi ... Petlja dok nije prazno (ćelije (iRow, 1))

Osim struktura odlučivanja, postoji još jedna vrsta kontrolne strukture koja se naziva ciklus.

Ciklus je algoritamska struktura uz pomoć koje se realizira višestruko ponavljanje blokova operatora.

Postoje tri glavne vrste petlji u Visual Basicu, koje se implementiraju pomoću konstrukcija For:Next, Do:Loop i While:Wend.

Za: Sljedeća petlja. Koristi se kada je broj ponavljanja zadanog bloka iskaza unaprijed poznat. Ovaj dizajn izgleda ovako:

Za brojač = početna vrijednost Do konačne vrijednosti Operatori1 Operatori2 Dalje [brojač]

Kada se gornje naredbe izvrše prvi put, varijabli brojača se dodjeljuje početna vrijednost, nakon čega su moguće dvije opcije. Ako se kao rezultat provjere brojača uvjeta > konačne vrijednosti dobije vrijednost True, tada petlja završava, a blokovi operatori1 i operatori2 se nikada ne izvršavaju. S druge strane, ako je rezultat testa uvjeta False, tada se blokovi iskaza izvode prvi put, nakon čega dolazi do prijelaza na početak petlje. Zatim se vrijednost varijable brojača povećava za korak koji se nalazi iza ključne riječi Step (ako je nema, postavlja se korak = 1). Nakon toga se ponovno provjerava istinitost brojača uvjeta > konačne vrijednosti itd., kraj petlje se događa u trenutku kada je rezultat ove provjere vrijednost True.

Često je potrebno "nenormalno" prekinuti ciklus prilikom izvođenja nekih dodatni uvjet. U ovom slučaju, unutar petlje trebali biste koristiti izraz usluge Exit:For, koji se obično nalazi u kontrolnoj konstrukciji, na primjer:

If uvjet Then Exit For

Ako je rezultat provjere uvjeta True, tada će se izvođenje petlje prekinuti i blok operator1 će se ponovno izvršiti, ali blok operator2 neće.

Uradi: Petlja. Koristi se kada je broj ponavljanja operatora tijela petlje unaprijed nepoznat. Postoje četiri varijante ovog dizajna. Kada koristite prva dva, petlja će se ili izvršiti mnogo puta ili uopće neće biti izvršena.

Do Until uvjet Loop izjave

Ako je rezultat provjere uvjeta False, tada se blok naredbi izvršava, u suprotnom se vrši prijelaz na naredbu koja se nalazi iza servisne riječi Loop. S druge strane, ako prvi test uvjeta vrati rezultat True, tada se petlja neće izvršiti niti jednom.

Naredbe petlje uvjeta Do While

Ako je uvjet istinit, tada se blok naredbi izvršava, ali ako je lažan, odnosno rezultat provjere je False, tada se petlja neće izvršiti niti jednom.

Ako se koriste posljednje dvije konstrukcije, petlja će se izvršiti barem jednom.

Do uvjeta petlje izjava do

Blok iskaza se izvršava sve dok je rezultat testa uvjeta False, inače petlja završava.

Do Izjave Loop While uvjet

Ako je uvjet lažan, blok naredbi se izvršava, ali ako je istinit, tj. Rezultat provjere je True, tada dolazi do kraja ciklusa.

Dok petlja: Wend. Također se koristi kada je broj ponavljanja naredbi tijela petlje unaprijed nepoznat i ima sljedeću sintaksu:

Dok stanje Wend izjave

Ako je rezultat provjere uvjeta True, tada se blok naredbi izvršava, u protivnom se vrši prijelaz na naredbu koja se nalazi iza servisne riječi Wend. S druge strane, ako prvi test uvjeta rezultira False, tada se petlja neće izvršiti niti jednom.

Ciklus je algoritamska struktura uz pomoć kojih se ostvaruje opetovano ponavljanje bloka operatora.

Izjava petlje s brojačem (Za ... Dalje)

Instrukcija For...Next omogućuje cikličko izvršavanje skupa instrukcija (operatora) određeni broj puta. Sintaksa instrukcija:

Za brojač = početna_vrijednost Do krajnja_vrijednost

[upute]

[upute]

Sljedeći [ brojač]

Parametar brojač je numerička varijabla koja automatski mijenja svoju vrijednost za korak nakon svakog ponavljanja ciklusa. Petlja se izvodi sve dok brojač£ krajnja_vrijednost s pozitivnom vrijednošću parametra korak ili do brojač³ krajnja_vrijednost s negativnom vrijednošću parametra korak. Dakle, petlja se neće izvršiti ni jednom ako, s pozitivnom vrijednošću koraka početna_vrijednost više od krajnja_vrijednost. Ako je parametar Step korak izostavljen, tada je prema zadanim postavkama povećanje varijable brojača postavljeno na 1.

Naredba Exit For prekida petlju "rano" i prenosi kontrolu na naredbu koja slijedi nakon naredbe petlje. Izlaz za obično se stavlja u uvjetnu izjavu, na primjer:

Ako stanje Zatim Izlaz za

Bilješka. Prema sintaksi operatora For, parametar brojač– aritmetička varijabla bilo kojeg tipa, ipak je bolje koristiti cijeli tip varijable, budući da razlomački dio vrijednosti varijable realnog tipa obično ima pogrešku. To ima veze s načinom na koji su brojevi pohranjeni u računalu.

Primjer 1

Nađi zbroj prvog 10 prirodni brojevi: S = 1 + 2 + 3 + …+ 10 . Fragment programa:

Dim I kao Integer, S kao Integer

S=0 " Resetirajte vrijednost varijable S

Za i = 1 do 10 " Početak ciklusa. Postavite početnu i završnu vrijednost
"parametar petlje. Zadani korak petlje je 1.

S = S + i " Svaki put se izvršava operator dodjele
"izvršavanje petlje, in u ovom primjeru 10 puta

Dalje ja " Kraj ciklusa. Vrijednost parametra petlje povećava se za jedan korak.

U ovom fragmentu programa, petlja će se izvršiti točno 10 puta.

Primjer 2

Prikažite u 1. stupcu radnog lista (počevši od 2. retka) x vrijednosti u rasponu od 0 do 3,2 u koracima od 0,4.

Javna podkartica()

Dim x kao jedan, i kao cijeli broj

Za x = 0 do 3.2 Korak 0.4

Iako je duljina intervala točno podijeljena s povećanjem od 0,4, rezultat na radnom listu je:

Što uraditi?

1. Konačnu vrijednost možete malo povećati, u ovom primjeru umjesto 3,2 napišite 3,201.

2. Odredite broj ponavljanja chiclea i napišite petlju koristeći brojač cjelobrojnog tipa.

U ovom slučaju program će imati sljedeći oblik:

Javna podkartica1()

Dim x kao jedan, i kao cijeli broj, n kao cijeli broj

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

Za i = 0 do n Korak 1

Ćelije(i + 2, 1) = x

Naredba petlje za svaki...sljedeći

Petlja For Every...Next omogućuje ponavljanje izvođenja grupe instrukcija za svaki element niza ili obitelji. Ova uputa ima sljedeću sintaksu:

Za svakoga element U skupina

[upute]

[upute]

Sljedeći [ element]

Parametar element je varijabla koja predstavlja element obitelji ili niza. Argument skupina– naziv niza ili obitelji. Instrukcije se izvršavaju samo jednom za svakog člana grupe. Korištenje izjave je zgodno jer ne morate unaprijed znati koliko je elemenata u nizu ili obitelji. Varijabilna element mora biti tipa Variant.

Primjer 1

Pronađite aritmetičku sredinu svih elemenata odabranog raspona

Prosjek javne funkcije (raspon kao raspon) kao dvostruko

Dim element kao varijanta

Dim Amount As Double

Dim Količina kao cijeli broj

Količina = 0

Za svaki element u rasponu

Iznos = Iznos + Element

Količina = Količina + 1

Sljedeći element

Prosjek = iznos / količina

Primjena. Odabrani raspon susjednih ćelija mora sadržavati brojeve. Brojevi u praznim ćelijama smatraju se 0. Tekst u ćeliji rezultirat će pogreškom.

Gore navedene naredbe If ... End If, Select ... Case, For ... Next, For Each ... Next skupina su kontrolnih instrukcija koje mijenjaju redoslijed izvršavanja naredbi. Kontrolne instrukcije mogu biti ugniježđene jedna u drugu bilo kojim redoslijedom.