![cicluri VBA - pentru următoare și pentru fiecare pentru a excela, exceltip (MsgBox contra ultima valoare) cicluri VBA - pentru următorul, și pentru fiecare în Excel, exceltip](https://images-on-off.com/images/45/vbatsiklifornextiforeachvexcelexceltip-200f857a.png)
O buclă în VBA - una dintre cele mai populare cicluri în Excel. Acest ciclu are două forme - pentru Înainte și pentru fiecare în următorul. Acești operatori sunt utilizate pentru a muta secvențial prin lista de elemente sau numere întregi. în orice moment, putem folosi comanda de ieșire pentru a termina ciclul. Să aruncăm o privire mai atentă la fiecare dintre aceste cicluri.
VBA Pentru buclă Următoarea
Pentru bucla următor are următoarea sintaxă:
Pentru contor = nachalo_schetchika Pentru konets_schetchika
„Ce fel de acțiune
Următoarea counter
Ce facem aici, în esență, acest lucru creează o buclă care utilizează contorul variabilă ca deținător de timp. Setați valoarea la nachalo_schetchika. și creșterile (sau scăderi) de 1 în timpul fiecărei revoluții. Ciclul va fi executat atâta timp cât valoarea contorului devine konets_schetchika egale. Când ambele aceste valori se potrivesc, bucla este executată ultima dată și apoi să se oprească.
primer_tsikla1 Sub ()
Pentru contor = 1 până la 10
j = metru
Următoarea counter
MsgBox „Contravaloarea în ultima bobina este“ - counter
end Sub
Ultima valoare a contorului variabilă este egală cu 11
VBA ciclu invers pentru bucla de instrucțiuni STEP
Dacă aveți nevoie pentru a trece de la o valoare mai mare la cel mai mic - puteți utiliza o buclă în direcția opusă. Aici este un exemplu de ciclu invers:
primer_tsikla2 Sub ()
Pentru contor = 1 până la 10 Pasul -1
j = metru
Următoarea counter
MsgBox „Contravaloarea în ultima bobina este“ - counter
end Sub
Ultima valoare a contorului variabilă este egală cu 1.
După cum puteți vedea, putem folosi instrucțiuni Stepn pentru ciclul atât direcțiile înainte și înapoi. Pasul Valoarea implicită este 1, dar poate fi modificat, dacă este necesar, pentru a trece orice valori, atunci valoarea lui n este mai mare decât unul sau deplasa în direcția inversă, atunci n este negativ.
bucla VBA pentru fiecare ... Urmatorul
Pentru fiecare ciclu de ... buclă Următoarea este după cum urmează:
Pentru fiecare element_gruppy În gruppa_elementov
„Ce fel de acțiune
Următoarea element_gruppy
Aici variabila element_gruppy apartine gruppe_elementov (logica de fier.). Vreau sa spun, ca obiect gruppa_elementov ar trebui să fie o colecție de obiecte. Nu puteți rula o buclă pentru fiecare la obiectele individuale (Microsoft vă notifică imediat acestei 438-eroare).
![cicluri vba - pentru următorul, și pentru fiecare în Excel, exceltip (fiecare) cicluri VBA - pentru următorul, și pentru fiecare în Excel, exceltip](https://images-on-off.com/images/45/vbatsiklifornextiforeachvexcelexceltip-4fe21864.png)
Aceasta bucla iterează peste toate elementele unei colecții, începând cu prima. Puteți utiliza acest ciclu, în cazul în care aveți nevoie, de exemplu, pentru a ocoli toate foile din carte, obiectele de pe foaia de lucru, foi de calcul, etc.
primer_tsikla4 Sub ()
Pentru fiecare SHT În ActiveWorkbook.Worksheets
MsgBox sht.Name
Următoarea SHT
end Sub
... sau toate PivotTable pe o foaie
primer_tsikla Sub ()
Pentru fiecare pvt În ActiveSheet.PivotTables
MsgBox pvt.Name
Următoarea pvt
end Sub
VBA întreruperea ciclului
Dacă aveți nevoie pentru a ieși din ciclu până în momentul atinge condiția de terminare a ciclului, utilizați endfor echipa în legătură cu instrucțiunea IF. In exemplul de mai jos, vom lăsa bucla până când ajunge la starea de terminare, ieșirea din acest ciclu se va efectua în conformitate cu condiția atunci când contorul variabilă este egală cu 3.
primer_tsikla5 Sub ()
Pentru contor = 0 la 5
contor MsgBox
Dacă (contra = 3) Apoi Ieșire Pentru
Următoarea counter
end Sub
Treci o parte a ciclului Pentru fiecare
Treci o parte a ciclului, și apoi să se întoarcă - o practică proastă. Cu toate acestea, să ne uităm la un exemplu:
primer_tsikla6 Sub ()
j Dim Ca Integer
Pentru i = 0 la 5
b:
Dacă (j = 3) Apoi GoTo a:
j = i
Următoarea I
o:
j = 4
GoTo b:
MsgBox ( "valoare j =" - j)
end Sub
Am ratat o iterație (când j = 3). Crezi că ceea ce rezultatul va da programul? 3? 5? Ei bine ... de fapt, nici una dintre opțiuni nu este adevărat. Ciclul va rula pe termen nelimitat, până când memoria calculatorului a înecată.
Cu toate acestea, capacitatea de a sări peste un ciclu pas fără a avea consecințe acolo. Puteți crește valoarea contorului de 1 (sau altă valoare), se va sări peste operațiuni care sunt între aceste valori. Iată un exemplu:
primer_tsikla7 Sub ()
Pentru i = 0 la 5
i = i + 1
MsgBox I
Următoarea I
end Sub
Dar, apoi, din nou, aceasta este o practică proastă pentru a scrie cod, și poate duce la consecințe nedorite atunci când scrieți codul în viitor. În schimb, dacă este necesar, să treacă unele iterații, încercați Dacă sau Selectați funcția de caz.
Ați putea fi, de asemenea, interesat în următoarele articole
Bine ai venit! Spune-mi dacă este posibil să se facă ceva pentru ciclul de mișcare pe coloană și a fost în căutarea pentru cea mai mică valoare, ștergeți-l și re-cautate si eliminate din nou. Ar trebui să se oprească doar atunci când suma valorilor în această coloană nu va fi egală sau mai mică decât ceea ce valoarea de bază.