Pentru următorul vba excel, treceți la următorul. Instrucțiuni de buclă în VBA. Proiectul „Venit din depozit”

Există situații în care unui program VBA este necesar să efectueze același set de acțiuni de mai multe ori la rând (adică, repetă același bloc de cod de mai multe ori). Acest lucru se poate face folosind bucle VBA.

For Loop Statement în Visual Basic

Structura instrucțiunii buclei Pentruîn Visual Basic poate fi organizat într-una din două forme: ca o buclă Pentru următorul sau ca un ciclu Pentru fiecare.

Ciclul „Pentru... Următorul”

Ciclu Pentru următorul folosește o variabilă care preia secvențial valori dintr-un interval dat. La fiecare modificare a valorii variabilei, sunt efectuate acțiunile conținute în corpul buclei. Acest lucru este ușor de înțeles dintr-un exemplu simplu:

Pentru i = 1 până la 10 Total = Total + iArray(i) Următorul i

În această buclă simplă Pentru următorul este utilizată variabila i, care ia secvențial valorile 1, 2, 3, ... 10, iar pentru fiecare dintre aceste valori este executat codul VBA din interiorul buclei. Astfel, această buclă însumează elementele matricei iArrayîntr-o variabilă Total.

În exemplul de mai sus, pasul de incrementare a buclei nu este specificat, deci pentru a incrementa variabila i De la 1 la 10, valoarea implicită este increment 1 . Cu toate acestea, în unele cazuri, este necesar să utilizați valori de increment diferite pentru buclă. Acest lucru se poate face folosind cuvântul cheie Etapa, așa cum se arată în exemplul simplu următor.

Pentru d = 0 la 10 Pasul 0,1 dTotal = dTotal + d Următorul d

Deoarece în exemplul de mai sus, pasul de creștere este setat la 0.1 , apoi variabila dTotal pentru fiecare repetare a ciclului ia valorile 0,0, 0,1, 0,2, 0,3, ... 9,9, 10,0.

Pentru a determina pasul buclei în VBA, puteți utiliza o valoare negativă, de exemplu, astfel:

Pentru i = 10 To 1 Step -1 iArray(i) = i Next i

Aici este pasul de creștere -1 , deci variabila i cu fiecare repetare a ciclului ia valorile 10, 9, 8, ... 1.

Pentru fiecare buclă

Ciclu Pentru fiecare arata ca un ciclu Pentru următorul, dar în loc să parcurgeți secvența de valori pentru variabila contor Pentru fiecare efectuează un set de acțiuni pentru fiecare obiect dintr-un grup specificat de obiecte. În exemplul următor, folosind o buclă Pentru fiecare Listează toate foile din registrul de lucru Excel actual:

Dim wSheet ca foaie de lucru pentru fiecare wSheet din foile de lucru MsgBox "Sheet Found: " & wSheet.Name Next wSheet

Ieșire pentru operatorul de întrerupere a buclei

Operator Ieșire pentru folosit pentru a întrerupe ciclul. De îndată ce această instrucțiune este întâlnită în cod, programul încheie execuția buclei și trece la executarea instrucțiunilor găsite în cod imediat după această buclă. Aceasta poate fi folosită, de exemplu, pentru a căuta o anumită valoare într-o matrice. Pentru a face acest lucru, utilizați o buclă pentru a căuta prin fiecare element al matricei. Odată ce elementul necesar este găsit, nu mai este nevoie să vă uitați prin restul - ciclul este întrerupt.

Aplicație de operator Ieșire pentru demonstrat în exemplul următor. Aici bucla trece prin 100 de intrări de matrice și compară fiecare cu valoarea variabilei dVal. Dacă se găsește o potrivire, bucla este întreruptă:

Pentru i = 1 până la 100 Dacă dValues(i) = dVal Atunci IndexVal = i Ieșire pentru End If Next i

Faceți bucla While în Visual Basic

Ciclu Face în timp ce execută un bloc de cod atâta timp cât o anumită condiție este îndeplinită. Următorul este un exemplu de procedură Sub, în care, folosind o buclă Face în timp ce Numerele Fibonacci care nu depășesc 1000 sunt afișate secvenţial:

„Procedura Sub tipărește numere Fibonacci care nu depășesc 1000 Sub Fibonacci() Dim i As Integer „un contor pentru a indica poziția unui element în secvența Dim iFib As Integer „stochează valoarea curentă a secvenței Dim iFib_Next As Integer „stochează următoarea valoare a secvenței Dim iStep As Integer „stochează dimensiunea următorului increment „inițializează variabilele i și iFib_Next i = 1 iFib_Next = 0 „bucla Do While va fi executată până când valoarea „numărului actual Fibonacci depășește 1000 Do În timp ce 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

În exemplul dat, condiția iFib_Next< 1000 verificat la începutul ciclului. Prin urmare, dacă prima valoare iFib_Next Dacă ar fi mai mult de 1000, atunci bucla nu ar fi executată nici măcar o dată.

O altă modalitate de a implementa o buclă Face în timp ce– plasați condiția nu la început, ci la sfârșitul buclei. În acest caz, bucla va fi executată cel puțin o dată, indiferent dacă condiția este adevărată.

Schematic un astfel de ciclu Face în timp ce cu condiția verificată la sfârșit, va arăta astfel:

Faceți... Buclă în timp ce iFib_Next< 1000

Faceți până la bucla în Visual Basic

Ciclu Fă până la foarte asemănător cu un ciclu Face în timp ce: Blocul de cod din corpul buclei este executat din nou și din nou până când condiția specificată este îndeplinită (rezultatul expresiei condiționate este Adevărat). În procedura următoare Sub folosind o buclă Fă până la extrage valori din toate celulele dintr-o coloană A foaie de lucru până când se întâlnește o celulă goală în coloană:

IRow = 1 Do Until IsEmpty(Cells(iRow, 1)) „Valoarea celulei curente este stocată în tabloul dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Valoare iRow = iRow + 1 buclă

În exemplul de mai sus condiția IsEmpty(Celele(iRow, 1)) situat la începutul structurii Fă până la, prin urmare, bucla va fi executată cel puțin o dată dacă prima celulă luată nu este goală.

Cu toate acestea, așa cum sa arătat în exemplele de buclă Face în timp ce, în unele situații doriți ca bucla să fie executată cel puțin o dată, indiferent de rezultatul inițial al expresiei condiționate. În acest caz, expresia condiționată ar trebui plasată la sfârșitul buclei, astfel:

Efectuați... Buclă până când este gol(Celele(iRând, 1))

Instrucțiuni de buclă

În VBA Există două tipuri principale de bucle: bucle cu un numărător (parametric) și bucle cu o condiție (iterativă).

Buclele contrare sunt utilizate în cazurile în care este necesar să se efectueze anumite acțiuni de un anumit număr de ori.

Buclele condiționate sunt folosite atunci când anumite acțiuni dintr-un program trebuie repetate până când este îndeplinită o anumită condiție.

Bucle cu parametru Pentru următorul

Structura ciclului:

Pentru Cycle_parameter = Initial_Value La Valoarea_finală

[Pas Pas]

Operatori

[Ieșire pentru]

Următorul [Parametru_ciclului]

unde Pentru cuvânt cheie VBA (de la), indicând începutul ciclului;

variabilă loop_parameter definită ca un numărător de bucle;

Initial_Value un număr care specifică valoarea inițială a parametrului buclei;

La cuvântul cheie VBA (înainte), împărțire

Valoarea_inițială și Cunoștințe_finale;

Final_Value un număr care specifică valoarea parametrului buclei,

La care se termină ciclul;

Cuvânt cheie pas VBA (pas) folosit pentru

Specificații pentru pasul buclei, argument opțional;

Pas un număr care specifică pasul ciclului, de ex. valoarea cu care

Crește (sau scade) valoarea parametrului

Ciclu la fiecare pas. Acest număr ar putea fi

Negativ;

Ieșire pentru operator de ieșire anticipată din buclă (opțional);

Următorul cuvânt cheie VBA (următorul) denotă

Sfârșitul ciclului.

Ciclu de lucru:

Pasul 1 În primul rând, se determină parametrul buclei, iar valorile inițiale și finale ale acestei variabile sunt calculate și stocate.

Pasul 2 Parametrului buclă i se atribuie o valoare inițială.

Pasul 3 Valoarea inițială a parametrului buclei este comparată cu valoarea finală.

Dacă parametrul buclei este mai mare decât valoarea finală, programul iese imediat din buclă și sare la linia de cod care urmează buclei.

Pasul 4 Corpul buclei este executat.

Pasul 5 După executarea corpului buclei, următoarea valoare este atribuită parametrului buclei. Treceți la pasul 3.

Notă.

1. Dacă este folosit un cuvânt cheie Etapa , apoi parametrul buclei se modifică în funcție de numărul specificat după acest cuvânt. Dacă cuvântul Etapa este absent, atunci valoarea pasului este egală cu unu.

Exemplul 1.

Pentru I = 0 până la 10 Pasul 2 (valoarea I va crește cu 2)

2. Pentru... bucla următoare poate fi terminat devreme atunci când este atinsă orice condiție. Pentru a face acest lucru, la locul potrivit în buclă trebuie să plasați operatorul Ieșire pentru.

Exemplul 2.

Dim S ca întreg

Dim j ca întreg

S=2

Pentru j = 1 până la 10

S = S + j

Dacă S > 6 Atunci

Ieșire pentru (Ieșiți din buclă dacă valoarea S > 6)

Încheiați dacă

Următorul j

MsgBox(S)

Bucle condiționate (iterative)

Dacă o acțiune (mai multe acțiuni) trebuie efectuată de mai multe ori, dar nu se știe dinainte de câte ori și acest lucru depinde de o anumită condiție, atunci ar trebui să utilizați o buclă cu o precondiție sau o postcondiție.

În VBA există două bucle principale FĂ... BUCLĂ cu o condiție introdusă de un cuvânt cheie In timp ce , și cu condiția introdusă de cuvântul cheie Pana cand . Ambele pot fi cu precondiție sau postcondiție.

Sintaxă:

unde Do cuvânt cheie (a face);

In timp ce cuvânt cheie (încă);

Pana cand cuvânt cheie (până la);

Buclă un cuvânt cheie care indică sfârșitul ciclului;

<условие>o expresie logică al cărei adevăr este verificat

La începutul fiecărei execuții a corpului buclei;

<тело_цикла>succesiune arbitrară de operatori;

Fă... În timpul construcției citește: fă în timp ce condiția este îndeplinită. În proiectare Fă... În timp ce Pentru

The Do...Until construcție citește: faceți până când condiția este îndeplinită. În proiectare Fă... Până la Pentru a crește pasul, ar trebui să scrieți un operator special, deoarece în ea, spre deosebire de design Pentru , acest lucru nu se face automat.

Condiție scrisă după cuvântul cheie Pana cand , este verificat la sfârșitul fiecărei iterații (după ce corpul buclei este executat). Rețineți că nu funcționează exact la fel ca în buclă In timp ce . Dacă condiția este adevărată ( Adevărat ), apoi bucla se termină. Dacă condiția nu este îndeplinită (este falsă Fals ), apoi corpul buclei este executat din nou.

Exemplul 1.

Formularea problemei. Calculați suma unei serii finite folosind o procedură de subrutină.

Tehnologia de executare a sarcinilor:

1. Date inițiale: i  Z

Rezultat: S  R .

2. Introduceți următoarea procedură personalizată în modulul de proiect standard folosind o buclă cu o precondiție In timp ce:

Sub summa()

Dim S ca întreg

Dim i ca întreg

S=0

i=1

Faceți în timp ce i<= 10

S = S + i^2

i = i + 1

Buclă

MsgBox(S)

End Sub

3. Introduceți următoarea procedură personalizată în modulul de proiect standard folosind o buclă cu o precondiție Pana cand:

Sub summa()

Dim S ca întreg

Dim i ca întreg

S=0

i=1

Faceți până la i > 10

S = S + i^2

i = i + 1

Buclă

MsgBox(S)

End Sub

4 Introduceți următoarea procedură personalizată în modulul de proiect standard folosind o buclă cu o postcondiție In timp ce:

Sub summa()

Dim S ca întreg

Dim i ca întreg

S=0

i=1

S = S + i^2

i = i + 1

Buclă în timp ce i<= 10

MsgBox(S)

End Sub

5 Introduceți următoarea procedură personalizată în modulul de proiect standard folosind o buclă cu o postcondiție Pana cand:

Sub summa()

Dim S ca întreg

Dim i ca întreg

S=0

i=1

S = S + i^2

i = i + 1

Buclă până la i > 10

MsgBox(S)

End Sub

Poate exista o situație în care trebuie să executați un bloc de cod de mai multe ori. În general, instrucțiunile sunt executate secvențial: prima instrucțiune dintr-o funcție este executată mai întâi, apoi a doua etc.

Limbajele de programare oferă diferite structuri de control care permit căi de execuție mai complexe.

Instrucțiunea buclă ne permite să executăm o instrucțiune sau un grup de instrucțiuni de mai multe ori. Mai jos este o vedere generală a unei instrucțiuni bucle în VBA.

VBA oferă următoarele tipuri de bucle pentru a gestiona cerințele de buclă. Faceți clic pe următoarele link-uri pentru a verifica detaliile acestora.

pentru buclă

O buclă for este o structură de control al repetiției care permite unui dezvoltator să scrie eficient o buclă care trebuie executată de un anumit număr de ori.

Sintaxă

Mai jos este sintaxa buclei for în VBA.

Pentru contor = început Pentru a termina .... .... Următorul

Diagrama fluxului

Mai jos este fluxul de control în modul Loop -

  • Primul pas este finalizat. Acest pas vă permite să inițializați orice variabilă de control al buclei și să incrementați variabila contor de pași.
  • În al doilea rând, se evaluează starea. Dacă este adevărat, corpul buclei este executat. Dacă este fals, corpul buclei nu este executat și fluxul de control trece la următoarea instrucțiune imediat după bucla For.
  • După ce bucla For se execută, fluxul de control trece la următoarea instrucțiune. Această instrucțiune vă permite să actualizați orice variabile de control al buclei. Este actualizat în funcție de valoarea contorului de pași.
  • Starea este acum evaluată din nou. Dacă este adevărat, bucla este executată și procesul se repetă (corpul buclei, apoi creșterea pasului, apoi condiția din nou). Odată ce condiția devine falsă, bucla For se termină.

exemplu

Adăugați un buton și adăugați următoarea funcție.

Private Sub Constant_demo_Click() Dim a As Integer a = 10 For i = 0 To a Step 2 MsgBox "Valoarea este i este: " & i Next End Sub

Când codul de mai sus este compilat și executat, acesta produce următoarea ieșire.

Valoarea i este: 0
Valoarea i este: 2
Valoarea i este: 4
Valoarea i este: 6
Valoarea i este: 8
Valoarea i este: 10

Execută o secvență de instrucțiuni de mai multe ori și scurtează codul care controlează variabila buclă.

pentru... buclă

Fiecare buclă este folosită pentru a executa o instrucțiune sau un grup de instrucțiuni pe fiecare element dintr-o matrice sau colecție.

Pentru fiecare buclă este similară cu For Loop; cu toate acestea, bucla este executată pentru fiecare element din matrice sau grup. Prin urmare, contorul de pași nu va exista în acest tip de buclă. Este folosit în principal cu matrice sau în context obiect Sistemul de fișiere să lucreze recursiv.

Sintaxă

Mai jos este sintaxa pentru fiecare buclă în VBA.

Pentru fiecare element din grup.... În continuare

exemplu

Private Sub Constant_demo_Click() "fructele este o matrice fructe = Array("măr", "orange", "cireșe") Dim fruitnames As Variant "iterarea folosind Pentru fiecare buclă. Pentru fiecare articol din fructe nume de fructe = nume de fructe & Item & Chr(10) Next MsgBox nume de fructe End Sub

Când este executat codul de mai sus, se tipăresc toate numele fructelor cu câte un element pe fiecare linie.

măr
portocale
cirese

Aceasta se execută dacă există cel puțin un element în grup și se repetă pentru fiecare element din grup.

în timp ce..wend bucla

Într-o buclă While While... Wend, dacă condiția este True, toate instrucțiunile sunt executate până când este întâlnit cuvântul cheie Wend.

Dacă condiția este falsă, bucla se termină și controlul trece la următoarea instrucțiune după cuvântul cheie Wend.

Sintaxă

Mai jos este sintaxa buclei While..Wend în VBA.

În timp ce starea(e) ... Wend

Diagrama fluxului

exemplu

Private Sub Constant_demo_Click() Dim Counter: Counter = 10 While Counter< 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

Când codul de mai sus este executat, va afișa următoarele în câmpul de mesaj.

Valoarea curentă a contorului este: 11
Valoarea curentă a contorului este: 12
Valoarea curentă a contorului este: 13
Valoarea curentă a contorului este: 14
Valoarea curentă a contorului este: 15

Aceasta verifică starea înainte de a executa corpul buclei.

face..while bucla

O buclă Do ... while este folosită atunci când dorim să repetăm ​​un set de instrucțiuni în timp ce o condiție este adevărată. Condiția poate fi verificată la începutul buclei sau la sfârșitul buclei.

Sintaxă

Mai jos este sintaxa lui Do...While loop în VBA.

Condiție Do While......Loop

Diagrama fluxului

exemplu

Următorul exemplu utilizează o buclă Do ... while pentru a verifica starea de la începutul buclei. Instrucțiunile din interiorul buclei sunt executate numai dacă condiția devine True.

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

Valoarea lui i este: 1
Valoarea lui i este: 2
Valoarea lui i este: 3
Valoarea lui i este: 4
Valoarea lui i este: 5

Sintaxă alternativă

Există, de asemenea, o sintaxă alternativă pentru bucla Do ... while care verifică starea la sfârșitul buclei. Principala diferență dintre aceste două sintaxe este explicată în exemplul următor.

Do ...... Condiție Loop While

exemplu

Următorul exemplu folosește o buclă Do ... while pentru a verifica starea la sfârșitul buclei. Declarațiile dintr-o buclă sunt executate cel puțin o dată, chiar dacă condiția este False.

Private Sub Constant_demo_Click() i = 10 Do i = i + 1 MsgBox "Valoarea lui i este: " & i Loop While i< 3 "Condition is false.Hence loop is executed once. End Sub

Când codul de mai sus este executat, se tipărește următoarea ieșire într-o casetă de mesaj.

Valoarea lui i este: 11

Instrucțiunile do..While vor fi executate atâta timp cât condiția este True. (Adică) Bucla trebuie repetată până când condiția este Falsă.

do..intil bucla

O buclă do ... întil nu va fi folosită atunci când dorim să repetăm ​​un set de instrucțiuni în timp ce condiția este falsă. Condiția poate fi verificată la începutul buclei sau la sfârșitul buclei.

Sintaxă

Mai jos este sintaxa lui Do..Until bucla în VBA.

A face până la condiția ... ... Buclă

Diagrama fluxului

exemplu

Următorul exemplu folosește Do... Before Loop pentru a testa o condiție la începutul buclei. Instrucțiunile din interiorul buclei sunt executate numai dacă condiția este falsă. Iese din buclă când condiția devine adevărată.

Private Sub Constant_demo_Click() i = 10 Do Until i>15 "Condiția este falsă. Prin urmare, bucla va fi executată i = i + 1 msgbox ("Valoarea lui i este: " & i) Loop End Sub

Când codul de mai sus este executat, se tipărește următoarea ieșire într-o casetă de mesaj.

Valoarea lui i este: 11
Valoarea lui i este: 12
Valoarea lui i este: 13
Valoarea lui i este: 14
Valoarea lui i este: 15
Valoarea lui i este: 16

Sintaxă alternativă

Există, de asemenea, o sintaxă alternativă, Do... Before Loop, care testează condiția de la sfârșitul buclei. Principala diferență dintre aceste două sintaxe este explicată de următorul exemplu.

Do ... ... Buclă până la condiție

Diagrama fluxului

exemplu

Următorul exemplu folosește Do...Before o buclă pentru a testa o condiție la sfârșitul buclei. Instrucțiunile dintr-o buclă sunt executate cel puțin o dată, chiar dacă condiția este adevărată.

Private Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "Valoarea lui i este: " & i Loop Până la i more15 "Condiția este adevărată. Prin urmare, bucla este executată o dată. End Sub

Când codul de mai sus este executat, se tipărește următoarea ieșire într-o casetă de mesaj.

Valoarea lui i este: 11

Instrucțiunile do..Until vor fi executate atâta timp cât condiția este False. (Adică) Bucla trebuie repetată până când condiția este adevărată.

Înregistrări de control al ciclului

Instrucțiunile de control al buclei modifică execuția din secvența lor normală. Când execuția părăsește domeniul de aplicare, toate celelalte instrucțiuni de buclă nu sunt executate.

Declarație de control și descriere

Ieșire operator

Exit for este folosit atunci când dorim să ieșim din bucla For pe baza anumitor criterii. Când Exit For este executat, controlul trece la următoarea instrucțiune imediat după bucla For.

Sintaxă

Mai jos este sintaxa Exit For Statement în VBA.

Diagrama fluxului

exemplu

Următorul exemplu folosește Exit For. Dacă contorul ajunge la 4, bucla For se termină și controlul trece la următoarea instrucțiune imediat după bucla For.

Private Sub Constant_demo_Click() Dim a As Integer a = 10 For i = 0 To a Step 2 "i este variabila contor și este incrementată cu 2 MsgBox ("Valoarea este i este: " & i) Dacă i = 4 Atunci i = i * 10 "Acest lucru este executat numai dacă i=4 MsgBox ("Valoarea este i este: " & i) Exit For "Exited when i=4 End If Next End Sub

Când codul de mai sus este executat, se tipărește următoarea ieșire în caseta de mesaj.

Valoarea i este: 0
Valoarea i este: 2
Valoarea i este: 4
Valoarea i este: 40

Termină o instrucțiune de buclă For și transferă execuția instrucțiunii imediat după buclă

Ieșiți Do

Declarația Exit Do este folosită atunci când dorim să ieșim din buclele Do pe baza anumitor criterii. Poate fi folosit atât în ​​bucle Do Do...While și Do...Before.

Când Exit Do este executat, controlul trece la următoarea instrucțiune imediat după bucla Do.

Sintaxă

Mai jos este sintaxa instrucțiunii Exit Do în VBA.

exemplu

Următorul exemplu folosește Exit Do. Dacă contorul ajunge la 10, linia de ieșire Do se termină și controlul trece la următoarea instrucțiune imediat după bucla For.

Private Sub Constant_demo_Click() i = 0 Do While i<= 100 If i >10 Then Exit Do " Loop Exits if i>10 End If MsgBox ("Valoarea lui i este: " & i) i = i + 2 Loop End Sub

Când codul de mai sus este executat, se tipărește următoarea ieșire într-o casetă de mesaj.

Valoarea lui i este: 0
Valoarea lui i este: 2
Valoarea lui i este: 4
Valoarea lui i este: 6
Valoarea lui i este: 8
Valoarea lui i este: 10

Completează o instrucțiune Do While și transferă execuția instrucțiunii imediat după buclă

Lucrări de laborator privind bazele programării

2.1. Tabelarea funcţiilor reprezentate analitic
și convergând în apropiere

Scopul lucrării

· Consolidarea cunoștințelor teoretice privind bazele organizării structurilor ramificate și ciclice.

· Dobândirea deprinderilor practice de programare folosind structuri ramificate și ciclice în sistemul Visual Basic.

Există trei tipuri de instrucțiuni bucle în VB:

ciclu de numărare: Pentru...To...Next

bucle cu precondiții: Do While...Loop, Do Until...Loop, While...WEnd

· bucle cu postcondiții: Do...Loop While, Do...Loop Until.

Bucla de numărare – vă permite să parcurgeți un set de instrucțiuni de un număr specificat de ori. Sintaxa sa este următoarea:

Pentru tejghea = start La Sfârşit

[operatori]

[operatori]

Următorul [ tejghea]

Parametru tejghea este o variabilă numerică (întreg, tip real sau Data, Varianta, tip Monedă) care este incrementată automat după fiecare repetare. Valoarea initiala tejghea egal cu parametrul Start,și parametrul final - Sfârşit. Dacă nu este specificat, pasul este considerat egal cu 1; valoarea pasului poate fi modificată. Poate fi un număr pozitiv sau negativ.

Există patru constructe sintactice ale buclei Do....Loop:

Instrucțiunile dintre cuvintele cheie Do... Loop sunt executate de un număr specificat de ori în funcție de condiție. De exemplu, în următorul fragment de program, când C = 100, condiția va fi îndeplinită și va fi introdusă bucla. În interiorul buclei se apelează procedura și se micșorează valoarea lui C cu 1. Apoi se verifică din nou condiția (C > 0) și se execută din nou operatorii de buclă (se vor executa de 100 de ori în total), până când C = 0. Când condiția C > 0 devine falsă și bucla se oprește.

Faceți în timp ce C > 0

Același fragment de program executat folosind o buclă cu o precondiție în sintaxa 2:

În acest caz, bucla rulează atâta timp cât condiția este False, spre deosebire de cazul precedent, adică continuă inainte deîndeplinirea condiției C = 0.

Instrucțiunile buclei 3 și 4 sunt foarte asemănătoare ca sintaxă cu primele două, cu excepția faptului că condiția Nu se calculează până când bucla este executată cel puțin o dată.

Aceste sintaxe de buclă pot folosi instrucțiunile de ieșire a buclei necondiționate Exit For și Exit Do pentru a transfera controlul operatorului din spatele buclei. De exemplu, în următorul fragment de program, dacă valoarea inițială a lui C este >50, atunci bucla se va opri imediat.



Fă până la C<= 0

MsgBox „Start” valoarea este mai mare decât acceptabilă”, „Eroare de intrare”

Bucla While...Wend a fost folosită în versiunile timpurii ale Visual Basic. Sintaxa sa este următoarea:

In timp ce<условие>

<Операторы>

Spre deosebire de bucla Do..Loop, bucla While ..Wend nu are o a doua opțiune în care condiția să fie verificată la sfârșitul buclei. În plus, nu există nicio declarație de ieșire în buclă, cum ar fi Exit Do.

VBA. Organizarea ciclurilor.

Instrucțiunile buclă sunt folosite pentru a repeta o acțiune sau un grup de acțiuni de un număr specificat de ori. Numărul de repetări (iterații în buclă) poate fi predefinit sau calculat.

VBA acceptă două tipuri de constructe în buclă:

  1. Bucle cu un număr fix de repetări ( bucle contracate).
  2. Bucle cu un număr nedefinit de repetări ( bucle condiționate).

Pentru toate tipurile de cicluri se utilizează conceptul corpul buclei , care definește un bloc de instrucțiuni incluse între instrucțiunile de început și de sfârșit ale buclei. Se numește fiecare repetare a execuției instrucțiunilor corpului buclei repetare

Cicluri fixe

VBA oferă două structuri de control pentru organizarea unei bucle fixe: For ... Next (bucla cu un contor) și For Each ... Next (bucla cu o enumerare).

Operator pentru... În continuare Aceasta este o buclă tipică de contor care execută un număr specificat de iterații. Sintaxa instrucțiunii For...Next este:

Pentru<счетчик> = <начЗначение>Acea<конЗначение>

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

Următorul [<счетчик>]

Un exemplu de utilizare a operatorului For...Next.

Listare 1. Pentru... Următorul operator

‘ SARCINA: Creați un program care primește două numere de la utilizator.

‘ Adaugă toate numerele din intervalul specificat de aceste două numere și apoi

‘ afișează suma rezultată.

Subeșantion7()

Dim i As Integer ‘contor de cicluri

Dim sStart „valoarea inițială a contorului

Dim sEnd ‘valoarea contorului final

Dim sSum As Long ‘suma rezultată

sStart = InputBox(„Introduceți primul număr:”)

sEnd = InputBox(„Introduceți al doilea număr:”)

sSum = 0

Pentru i = CInt(sStart) To CInt(sEnd)

sSum = sSum + i

Apoi eu

MsgBox „Suma numerelor de la „ & sStart & ” la „ & sEnd & ” este: „ & sSum

End Sub

Declarație buclă pentru fiecare... În continuareaparține categoriei operatorilor de tip obiect, adică. se aplică în primul rând colecțiilor obiecte, precum și matrice . Corpul buclei este executat de un număr fix de ori, corespunzător numărului de elemente din matrice sau colecție. Pentru fiecare... formatul de declarație următor:

Pentru fiecare<элемент>În<группа> <блок операторов>Următorul [<элемент>]

Bucle condiționate (bucle nedefinite)

Buclele condiționate sunt utilizate atunci când acțiunile repetate trebuie efectuate numai în anumite condiții. Numărul de iterații nu este definit și, în general, poate fi egal cu zero (în special, pentru bucle cu o precondiție). VBA oferă dezvoltatorilor mai multe structuri de control pentru organizarea buclelor condiționate:

  • Patru tipuri de Do..Loops, care diferă în funcție de tipul de condiție care este verificată și de timpul necesar pentru a finaliza această verificare.
  • Buclă continuă în timp ce... Wend.

Bucla Do While... este tipică buclă cu precondiție. Condiția este verificată înainte ca corpul buclei să fie executat. Ciclul își continuă activitatea până când acesta<условие>este executat (adică are valoarea True). Deoarece verificarea este efectuată la început, corpul buclei nu poate fi executat niciodată. Do While... Format buclă:

Face în timp ce<условие>

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

Buclă

Lista 2. Do While... Loop

‘ SARCINA: Creați un program care necesită intrarea utilizatorului

„o succesiune arbitrară de numere. Intrarea trebuie să fie terminată

„ numai după ce suma numerelor impare introduse depășește 100.

Subeșantion8()

Dim OddSum As Integer „suma de numere impare”.

Dim OddStr As String „un șir cu numere impare

Dim Num pentru a accepta numerele introduse

OddStr = „” ‘inițializarea șirului de ieșire

OddSum = 0 ‘inițializați OddSum

Do While OddSum< 100 ‘начало цикла

Num = InputBox(„Introduceți un număr: “)

Dacă (Număr Mod 2)<>0 Apoi „verificarea parității”.

OddSum = OddSum + Num „acumularea sumei numerelor impare

OddStr = OddStr & Num & ” ”

Încheiați dacă

Buclă

„Tipărește un șir cu numere impare

MsgBox prompt:=”Numere impare: ” & OddStr

End Sub

Do... Instrucțiunea Loop Whileconcepute pentru organizarebuclă cu postcondiție. Condiția este verificată după ce corpul buclei a fost executat cel puțin o dată. Ciclul își continuă activitatea până când<условие>rămâne adevărat. Do... Loop While Format:

Do<блок операторов>Buclă în timp ce<условие>

Lista 3. Buclă cu postcondiție

SARCINA: Creați un program pentru jocul „Ghicește numărul”. Programul trebuie să fie aleatoriu

„Modul de a genera un număr în intervalul de la 1 la 1000, utilizatorul trebuie

ghici acest număr. Programul afișează un indiciu pentru fiecare număr introdus

' "mai mult sau mai putin".

Subeșantion8()

Randomize Timer „inițializați generatorul de numere aleatorii

Dim msg As String ‘ șirul de mesaj

Dim SecretNumber As Long, UserNumber As Variant

Începe: SecretNumber = Round(Rnd * 1000) ‘ număr generat de computer

UserNumber = Numărul gol introdus de utilizator

Faceți un joc

Selectați Case True

Case IsEmpty(UserNumber): msg = „Introduceți un număr”

Case UserNumber > SecretNumber: msg = „Prea multe!”

Număr de utilizator al cazului< SecretNumber: msg = “Слишком мало!”

Încheierea selectării

UserNumber = InputBox(prompt:=msg, Title:=”Ghicește numărul”)

Loop While UserNumber<>Număr secret

' examinare

Dacă MsgBox(„Jucați din nou?”, vbDaNu + vbÎntrebare, „Ați ghicit!”) = vbDa Atunci

GoTo Begin

Încheiați dacă

End Sub

Loops Do Until... Loop and Do... Loop Until sunt inversiuni ale buclelor condiționale discutate anterior. În general, ele funcționează în mod similar, cu excepția faptului că corpul buclei este executat dacă condiția este falsă (de ex.<условие>= Fals). Faceți până la... Format buclă:

Fă până la<условие> <блок операторов>Buclă

Efectuați... Buclă până la formatul buclei:

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

Buclă până la<условие>

Sarcina practica:Rescrieți programele din listele 10 și 11 folosind instrucțiuni de buclă inversată.

Loop While...Wend se aplică și buclelor condiționate. Acest operator este pe deplin în concordanță cu structura Do While... Loop. While...Format buclă Wend:

In timp ce<условие>

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

Merge încet

O trăsătură distinctivă a acestui operator este imposibilitatea rezilierea forțată(întreruperea) corpul buclei (instrucțiunea Exit Do nu funcționează în bucla While ... Wend).

Întreruperea unui ciclu

Pentru a termina o iterație mai devreme și a ieși din buclă, este utilizată instrucțiunea Exit. Acest operator este aplicabil în orice structură ciclică, cu excepția While... Wend. Sintaxa generală pentru utilizarea Exit pentru a întrerupe o buclă este:

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

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

Ieșire (Pentru | Faceți)

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

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

Când instrucțiunea Exit este executată, bucla este întreruptă și controlul este transferat instrucțiunii care urmează instrucțiunii<конец_цикла>. Pot exista mai multe instrucțiuni Exit în corpul unei bucle.

Lista 4. Forțați ieșirea din buclă

Subeșantion9()

Pentru i = 1 până la 10000000

Dacă i = 10, atunci Exit For ‘ ieși din buclă când contorul ajunge la 10

Următorul




Top