În acest articol, am acoperit diferite tipuri de bucle utilizate în VBA și cum să le folosim pentru a realiza aceeași sarcină în moduri diferite.
De ce bucle?
Buclarea este una dintre cele mai puternice tehnici de programare utilizate în multe limbaje de programare. Buclarea este utilizată pentru a repeta un bloc de cod pentru numărul necesar de ori sau până când o condiție dată se evaluează la adevărat sau se atinge o valoare specifică, după care următorul bloc de cod este executat.
Scopul unei bucle Excel VBA este de a face ca Excel să repete o bucată de cod de anumite ori. Se poate specifica de câte ori trebuie să se repete un cod ca număr fix (de exemplu, faceți acest lucru de 10 ori) sau ca variabilă (de exemplu, faceți acest lucru de câte ori există rânduri de date).
Buclele Excel pot fi construite în moduri diferite pentru a se potrivi circumstanțelor diferite. Adesea, aceleași rezultate pot fi obținute în moduri diferite pentru a se potrivi preferințelor dvs. personale.
Există trei tipuri diferite de bucle disponibile în Excel VBA, care sunt:
1. FĂ PÂNĂ Buclă
2. FĂ CE ÎN TIMP Buclă
3. PENTRU Buclă
1. FĂ PÂNĂ Buclă
Bucla DO UNTIL este utilizată pentru a repeta un bloc de cod la infinit, până când condiția specificată este setată la True. Starea poate fi verificată fie la începutul, fie la sfârșitul buclei. Declarația DO UNTIL … LOOP testează starea la început, în timp ce declarația DO … LOOP UNTIL testează starea la sfârșitul loop-ului.
Sintaxa declarației DO UNTIL … LOOP
Fă până la [condiție]
[Bloc de cod de repetat]
Buclă
Sintaxa DO… LOOP UNTIL statement
Do
[Bloc de cod de repetat]
Bucla până la [Condiție]
Am explicat DO… PÂNĂ bucla cu un exemplu. Macro-urile Loop1 și Loop2 sunt utilizate pentru a calcula media numerelor din coloana A și coloana B folosind bucla DO… Până la.
Datele de probă sunt prezente în intervalul A15: B27. Coloana A conține scoruri din Runda 1 și coloana B conține scoruri din Runda 2. Vrem să calculăm mediile scorurilor din Runda 1 și Runda 2 din coloana C.
În macro Loop1, am folosit „FormulaR1C1” pentru a insera formula medie în celula activă. Instrucțiunea de condiție în bucla DO UNTIL este verificată la sfârșitul buclei.
În macro Loop2, am folosit „WorksheetFunction.Average” pentru a insera valoarea medie în celula activă. Chiar și în această macro, instrucțiunea de condiție este verificată la sfârșitul buclei.
Singura diferență între macro Loop1 și Loop2 este că Loop1 introduce formula medie, în timp ce Loop2 calculează media și apoi introduce valoarea medie în celula activă.
2. FĂ CE ÎN TIMP Buclă
Bucla DO WHILE este utilizată pentru a repeta un bloc de cod de nedefinit de câte ori, în timp ce condiția specificată continuă să fie True și se oprește atunci când condiția returnează False. Starea poate fi verificată fie la începutul, fie la sfârșitul buclei. Instrucțiunea DO WHILE … LOOP testează starea la început, în timp ce instrucțiunea DO … LOOP WHILE testează starea la sfârșitul buclei. Instrucțiunea DO … LOOP WHILE este utilizată atunci când vrem ca bucla să ruleze blocul de cod cel puțin o dată înainte de a verifica starea.
Sintaxa declarației DO WHILE … LOOP
Do While [Condition]
[Bloc de cod de repetat]
Buclă
Sintaxa declarației DO … LOOP WHILE
Do
[Bloc de cod de repetat]
Bucla în timp ce [Condiție]
În acest exemplu, macrocomenzile Loop3 și Loop4 sunt utilizate pentru a calcula mediile pentru valorile din celulele coloanei A și coloanei B. Ambele macrocomenzi funcționează pe aceleași date de eșantionare ca și cele utilizate de macrocomenzile Loop1 și Loop2. Ambele folosesc instrucțiunea DO WHILE pentru a parcurge intervalul care conține datele.
Singura diferență între macrocomenzile Loop3 și Loop4 este că acestea sunt modalități diferite de a reprezenta condițiile buclei DO WHILE.
Deoarece macrocomenzile Loop3 și Loop4 folosesc aceleași date de intrare și chiar îndeplinesc aceleași funcții ca macro Loop1, astfel încât ieșirea returnată va fi, de asemenea, aceeași ca și macro Loop1.
3. Bucla FOR
For Loop este folosit pentru a repeta un bloc de cod de un anumit număr de ori.
Sintaxa buclei FOR
Pentru count_variable = start_value To end_value
[bloc de cod]
Următorul număr_variabil
Macro Loop5 arată cum să utilizați bucla FOR pentru a calcula media. De asemenea, folosește același eșantion de date folosit de alte macrocomenzi. Am folosit 15 ca valoare de pornire, deoarece datele eșantionului încep de la 15a rând. Am folosit Range („A” & Cells.Rows.Count) .End (xlUp) .Row pentru a găsi ultimul rând care conține date. Bucla FOR se va repeta (lastcell- 15) de câte ori.
Ieșirea returnată după executarea macrocomandelor Loop5 este aceeași ca a macrocomandelor Loop1.
Macrocomanda Loop6 este creată pentru a calcula media, numai dacă celula activă care va avea funcția medie este goală înainte de a rula macrocomanda.
Eșantionul de date pentru această macrocomandă este prezent în intervalul E15 până la G27.
Am folosit DO… LOOP WHILE pentru a parcurge intervalul definit. Instrucțiunea IF este utilizată pentru a verifica dacă celula în care va fi inserată funcția conține o valoare. Această macrocomandă va insera funcția medie în celulă numai dacă este goală.
Macro Loop7 este, de asemenea, utilizat pentru a calcula media. Verifică dacă există valori în coloana de asistență înainte de a evalua dacă se va repeta bucla. De asemenea, verifică dacă referința la celulă care trebuie utilizată în funcția medie este goală.
Exemplele de date utilizate pentru macrocomanda Loop7 sunt în intervalul J15: M27.
Coloana M este utilizată ca coloană de ajutor. Această macrocomandă va insera o funcție medie numai dacă o celulă din coloana M nu este goală. Această macrocomandă verifică dacă o celulă trebuie să fie goală înainte de a insera o funcție medie în ea. Nu va insera o funcție medie dacă celula la care se face referire în funcția medie este goală.
Vă rugăm să urmați codul de mai jos
Opțiune Sub buclă explicită1 () Buclă „Calculare medie” Do Until se va bucla până când celula din coloana anterioară a celulei active este goală Range („C15”). Selectați Do 'Atribuind funcția medie a valorii în celulele celor două coloane consecutive ActiveCell. FormulaR1C1 = "= Media (RC [-1], RC [-2])" 'Mutare la celulă în rândul următor ActiveCell.Offset (1, 0). Selectați „Verificarea dacă valoarea din celula coloanei anterioare este goală” Faceți până bucla se va bucla până când instrucțiunea de condiție returnează True Loop Until IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Selectați End Sub Sub Loop2 () 'Calculul mediu' Buclă Do Until se va bucla până la celula din precedenta coloana celulei active este goală 'Această macrocomandă este similară macrocomandului Buclă1, singura modalitate de calculare a mediei este diferită Gama („C15”). Selectați Do' Worsheet. Funcția medie este utilizată pentru calcularea mediei ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0). Selectați Loop Until IsEmpty (ActiveCel l.Offset (0, -1)) Range ("A15"). Selectați End Sub Sub Loop3 () Bucla „Calculare medie” Do While va rula până când celula din coloana anterioară a celulei active este goală Range („C15”) . Selectați „Verificarea dacă valoarea din celula coloanei anterioare este goală” Bucla Do While se va bucla până când instrucțiunea de condiție este True Do While IsEmpty (ActiveCell.Offset (0, -1)) = False ”Atribuirea funcției medii la valoarea din celulele din precedent două coloane consecutive ActiveCell.FormulaR1C1 = "= Media (RC [-1], RC [-2])" 'Mutare în celulă în rândul următor ActiveCell.Offset (1, 0). Selectați Range Loop ("A15"). Selectați End Sub Sub Loop4 () „Calcularea medie” Buclă Do While va rula până când celula din coloana anterioară a celulei active este goală ”Această macro este similară cu macro Loop3, singura modalitate de aplicare a condiției este Gama diferită („ C15 ”). Selectați Faceți în timp ce nu este gol (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Selectați Range Loop (" A15 "). Selectați End Sub Sub Loop5 () 'FOR bucla se repetă pentru un amorțeală fixă er de ori determinat de numărul de rânduri Dim i, lastcell As Long 'Găsirea ultimului rând care conține date în coloana A lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp) .Row Range ("C15 "). Selectați variabilei" i i se atribuie o valoare de 15 deoarece datele de eșantionare încep de la al 15-lea rând "PENTRU Buclă va fi buclată x Pentru i = 15 La lastcell ActiveCell.FormulaR1C1 =" = Medie (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Selectați Next i Range (" A15 "). Selectați End Sub Sub Loop6 () 'Calcularea medie' Bucla Do Do Until se va bucla până când celula din coloana anterioară a celulei active este goală ' Nu calculează o medie dacă există deja ceva în intervalul de celule ("G15"). Selectați Do If IsEmpty (ActiveCell), apoi ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" End If ActiveCell.Offset (1, 0) .Select Bucla până când este gol (ActiveCell.Offset (0, -1)) Range ("E15"). Selectați End Sub Sub Loop7 () 'Do Until loop rulează atâta timp cât există ceva în celula din coloana următoare „Nu calculează o medie dacă există deja ceva în c activ ell 'Nici dacă nu există date în celule care sunt utilizate în cadrul funcției medii (pentru a evita # DIV / 0 erori). 'Calcularea intervalului mediu ("L15"). Selectați Do If IsEmpty (ActiveCell) Apoi If IsEmpty (ActiveCell.Offset (0, -1)) Și IsEmpty (ActiveCell.Offset (0, -2)) Apoi ActiveCell.Value = " "Altfel ActiveCell.FormulaR1C1 =" = Medie (RC [-1], RC [-2]) "Termină dacă Termină Dacă ActiveCell.Offset (1, 0). Selectați Buclă până când este gol (ActiveCell.Offset (0, 1)) Range ("J15"). Selectați End Sub
Dacă ți-a plăcut acest blog, distribuie-l prietenilor tăi de pe Facebook. De asemenea, ne puteți urmări pe Twitter și Facebook.
Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți munca noastră și o putem îmbunătăți. Scrieți-ne pe site-ul de e-mail