Bucle în VBA

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.

Buclele VBA includ:

În continuare, vom arunca o privire mai atentă asupra fiecăruia dintre aceste cicluri.

For Loop Operator în Visual Basic

Structura operatorului de buclă în Visual Basic poate fi organizat într-una din două forme: ca o buclă Pentru următorul sau ca o buclă 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 incluse în corpul ciclului. 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 în variabilă Total.

În exemplul de mai sus, incrementul buclei nu este specificat, deci pentru a incrementa variabila i de la 1 la 10, valoarea implicită este un increment 1… Cu toate acestea, în unele cazuri este necesar să se utilizeze valori de increment diferite pentru buclă. Acest lucru se poate face folosind cuvântul cheie Pasaș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 increment este setat egal cu 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 creșterea -1, deci variabila i cu fiecare repetare a ciclului ia valorile 10, 9, 8, … 1.

Buclă „Pentru fiecare”

Ciclu Pentru fiecare asemănător unui ciclu Pentru următorul, dar în loc să iterați asupra secvenței de valori pentru variabila contor, bucla Pentru fiecare efectuează un set de acțiuni pentru fiecare obiect din grupul de obiecte specificat. În exemplul următor, folosind o buclă Pentru fiecare enumeră toate foile din registrul de lucru Excel curent:

Dim wSheet ca foaie de lucru pentru fiecare wSheet din foile de lucru MsgBox "Найден лист: " & wSheet.Name Next wSheet

Instrucțiune de întrerupere în buclă „Exit For”

Operator Ieșiți 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 execuția instrucțiunilor care se află î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, folosind o buclă, fiecare element al matricei este scanat. De îndată ce elementul necesar este găsit, nu este nevoie să vă uitați prin restul - ciclul este întrerupt.

Aplicație de operator Ieșiți pentru demonstrat în exemplul următor. Aici bucla repetă peste 100 de intrări de matrice și compară fiecare cu valoarea variabilei dVal… Dacă se găsește o potrivire, atunci bucla se termină:

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

Bucla Do While în Visual Basic

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

„Sub procedură scoate numere Fibonacci care nu depășesc 1000 Sub Fibonacci() Dim i As Integer „contor pentru a indica poziția elementului î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țializați variabilele i și iFib_Next i = 1 iFib_Next = 0 „Do While bucla se va executa până când valoarea „numărului actual Fibonacci este mai mare de 1000 Do While iFib_Next < 1000 If i = 1 Apoi „caz special pentru primul element iStep = 1 iFib = 0 Else „salvați dimensiunea următorului increment înainte de a suprascrie „valoarea curentă a secvenței iStep = iFib iFib = iFib_Next End If” tipăriți numărul actual Fibonacci în coloana A din foaia de lucru activă „în rândul cu index i Cells(i , 1).Value = iFib „calculați următorul număr Fibonacci și creșteți indicele de poziție a elementului cu 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

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

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 îndeplinită.

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

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

Цикл «Do Until» în Visual Basic

Ciclu Face până la foarte asemănător cu ciclul 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 un ciclu Face până la preluați valorile din toate celulele dintr-o coloană A foaie de lucru până când coloana întâlnește o celulă goală:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) „Valoarea celulei curente este stocată în matricea 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 Face până la, deci bucla va fi executată cel puțin o dată dacă prima celulă luată nu este goală.

Cu toate acestea, așa cum se arată în exemplele de buclă Face în timp ce, în unele situații este necesar 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:

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

Lasă un comentariu