VBA ciklui, ciklų naudojimas VBA programoje „Microsoft Excel“

Anonim

Šiame straipsnyje mes apžvelgėme įvairių tipų kilpas, naudojamas VBA, ir kaip jas naudoti skirtingoms užduotims atlikti.

Kodėl kilpos?

„Looping“ yra vienas galingiausių programavimo būdų, naudojamas daugelyje programavimo kalbų. Ciklas naudojamas kartoti kodo bloką reikiamą skaičių kartų arba tol, kol tam tikra sąlyga įvertinama kaip tiesa arba pasiekiama tam tikra reikšmė, po kurios vykdomas kitas kodo blokas.

„Excel“ VBA ciklo tikslas yra priversti „Excel“ tam tikrą skaičių kartų pakartoti kodą. Galima nurodyti, kiek kartų kodas turi būti kartojamas kaip fiksuotas skaičius (pvz., Darykite tai 10 kartų) arba kaip kintamasis (pvz., Darykite tai tiek kartų, kiek yra duomenų eilučių).

„Excel“ kilpos gali būti sukurtos įvairiais būdais, kad atitiktų skirtingas aplinkybes. Dažnai tuos pačius rezultatus galima gauti įvairiais būdais, atsižvelgiant į jūsų asmenines nuostatas.

„Excel VBA“ yra trys skirtingų tipų kilpos, kurios yra:

1. DARYTI KILBĖ

2. DARYKITE, kol ciklas

3. FOR Loop

1. Darykite iki ciklo

Ciklas DO UNTIL naudojamas kartoti kodo bloką neribotą laiką, kol nurodyta sąlyga bus nustatyta į True. Būklę galima patikrinti ciklo pradžioje arba pabaigoje. DO UNTIL… LOOP sakinys tikrina būklę pradžioje, o DO… LOOP UNTIL sakinys tikrina būklę ciklo pabaigoje.

DO UNTIL… LOOP teiginio sintaksė

Daryti iki [sąlyga]

[Kodo blokas turi būti kartojamas]

Kilpa

Teiginio DO… LOOP UNTIL sintaksė

Daryk

[Kodo blokas turi būti kartojamas]

Ciklas iki [sąlyga]

Mes paaiškinome DO… iki ciklo su pavyzdžiu. „Loop1“ ir „Loop2“ makrokomandos naudojamos skaičiuojant A ir B stulpelių skaičių vidurkį, naudojant ciklą DO… UNTIL.

Pavyzdiniai duomenys yra diapazone A15: B27. A stulpelyje yra 1 raundo balai, o B skiltyje - 2 raundo balai. Mes norime apskaičiuoti 1 ir 2 raundo balų vidurkius C skiltyje.

„Loop1“ makrokomandoje mes naudojome „FormulaR1C1“, norėdami įterpti vidutinę formulę į aktyvų langelį. Būklės teiginys cikle DO UNTIL tikrinamas ciklo pabaigoje.

„Loop2“ makrokomandoje mes naudojome „WorksheetFunction.Average“, kad įterptume vidutinę vertę į aktyvų langelį. Net ir šioje makrokomandoje būklės teiginys tikrinamas ciklo pabaigoje.

Vienintelis skirtumas tarp „Loop1“ ir „Loop2“ makrokomandų yra tas, kad „Loop1“ įterpia vidutinę formulę, o „Loop2“ apskaičiuoja vidurkį ir įterpia vidutinę vertę į aktyvų langelį.

2. DARYKITE, kol ciklas

„DO WHILE“ ciklas naudojamas kartoti kodo bloką neribotą skaičių kartų, o nurodyta sąlyga ir toliau yra „True“ ir sustoja, kai sąlyga grąžina „False“. Būklę galima patikrinti ciklo pradžioje arba pabaigoje. DO WHILE… LOOP sakinys tikrina būklę pradžioje, o DO… LOOP WHILE sakinys tikrina būklę ciklo pabaigoje. DO… LOOP WHILE sakinys naudojamas, kai norime, kad ciklas bent kartą paleistų kodo bloką prieš tikrinant būklę.

Teiginio DO WHILE… LOOP sintaksė

Daryti kol [sąlyga]

[Kodo blokas turi būti kartojamas]

Kilpa

Teiginio DO… LOOP WHIL sintaksė

Daryk

[Kodo blokas turi būti kartojamas]

Kartoti [sąlyga]

Šiame pavyzdyje „Loop3“ ir „Loop4“ makrokomandos naudojamos A stulpelio ir B stulpelio langelių verčių vidurkiams apskaičiuoti. Abi makrokomandos dirba su tais pačiais mėginių duomenimis, kuriuos naudoja makrokomandos „Loop1“ ir „Loop2“. Abu naudoja DO WHILE sakinį, norėdami peržvelgti diapazoną, kuriame yra duomenys.

Vienintelis skirtumas tarp „Loop3“ ir „Loop4“ makrokomandų yra tas, kad jie yra skirtingi DO WHILE ciklo sąlygų vaizdavimo būdai.

Kadangi „Loop3“ ir „Loop4“ makrokomandos naudoja tuos pačius įvesties duomenis ir netgi atlieka tas pačias funkcijas kaip ir „Loop1“ makrokomanda, todėl grąžinama išvestis bus tokia pati kaip ir „Loop1“ makrokomandos.

3. FOR kilpa

„For Loop“ naudojamas kartoti kodo bloką tam tikrą skaičių kartų.

Kilpos FOR sintaksė

For count_variable = start_value Iki end_value

[kodo blokas]

Kitas skaičius_ kintamasis

Loop5 makrokomanda parodo, kaip naudoti FOR kilpą, norint apskaičiuoti vidurkį. Jis taip pat naudoja tuos pačius pavyzdinius duomenis, kuriuos naudoja kitos makrokomandos. Mes naudojome 15 kaip pradinę vertę, nes imties duomenys prasideda nuo 15tūkst eilė. Norėdami rasti paskutinę eilutę, kurioje yra duomenų, naudojome diapazoną („A“ ir „Cells.Rows.Count“) .End (xlUp). FOR kilpa kartosis (paskutinis langelis- 15) kelis kartus.

Išvestis grąžinama paleidus „Loop5“ makrokomandą, kaip ir „Loop1“ makrokomanda.

„Loop6“ makrokomanda sukuriama norint apskaičiuoti vidurkį tik tuo atveju, jei prieš paleidžiant makrokomandą aktyvi ląstelė, kuri turės vidutinę funkciją, yra tuščia.

Šios makrokomandos pavyzdiniai duomenys yra diapazone nuo E15 iki G27.

Mes naudojome DO… LOOP WHILE, norėdami pereiti per apibrėžtą diapazoną. IF sakinys naudojamas patikrinti, ar langelyje, kuriame bus įterpta funkcija, yra reikšmė. Ši makrokomanda įterps vidutinę funkciją į langelį tik tuo atveju, jei ji tuščia.

Loop7 makrokomanda taip pat naudojama apskaičiuoti vidurkį. Prieš vertindama, ar pakartoti ciklą, ji tikrina pagalbinės stulpelio reikšmes. Ji taip pat patikrina, ar langelio nuoroda, kuri turi būti naudojama vidutinėje funkcijoje, yra tuščia.

Loop7 makrokomandai naudojami pavyzdiniai duomenys yra diapazone J15: M27.

M stulpelis naudojamas kaip pagalbinė kolona. Ši makrokomanda įterps vidutinę funkciją tik tuo atveju, jei M stulpelio langelis nėra tuščias. Ši makrokomanda patikrina, ar langelis turi būti tuščias prieš įterpiant į jį vidutinę funkciją. Ji neįterps vidutinės funkcijos, jei ląstelė, į kurią nurodoma vidutinė funkcija, yra tuščia.

Sekite toliau pateiktą kodą

 Parinktis „Aiškioji antroji kilpa“ () „Apskaičiuojamas vidurkis“ „Iki kol“ ciklas suksis tol, kol ankstesnio aktyviojo langelio stulpelis bus tuščias. Diapazonas („C15“). Pasirinkite „Daryti“. FormulėR1C1 = "= Vidutinis (RC [-1], RC [-2])" "Perkeliamas į langelį kitoje eilutėje ActiveCell.Offset (1, 0). Pasirinkite" Tikrinti, ar ankstesnio stulpelio langelio vertė tuščia "Daryti iki ciklas suksis tol, kol sąlyginis teiginys grąžins „True Loop“ iki „IsEmpty“ („ActiveCell.Offset“ (0, -1)) „Diapazonas“ („A15“). Pasirinkite „End Sub Sub Loop2“ () „Skaičiuojamas vidurkis“ Aktyvios ląstelės stulpelis yra tuščias 'Ši makrokomanda yra panaši į makrokomandą „Loop1“, vienintelis būdas apskaičiuoti vidurkį yra skirtingas Diapazonas („C15“). Pasirinkite „Doors“. Vidutinė funkcija naudojama apskaičiuojant vidutinį „ActiveCell.Value = WorksheetFunction.Average“ ActiveCell.Offset (0, -1). Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0). Pasirinkite ciklą iki IsEmpty (ActiveCel l. Poslinkis (0, -1)) Diapazonas ("A15"). Pasirinkite Pabaigos antrąją antrinę kilpą . Pasirinkite „Tikrinimas, ar ankstesnio stulpelio langelio reikšmė tuščia“ „Do while“ ciklas tęsis tol, kol sąlygos teiginys bus teisingas „Do Do Is Ismpty“ („ActiveCell.Offset“ (0, -1)) = klaidinga du iš eilės stulpeliai ActiveCell.FormulaR1C1 = "= Vidutinis (RC [-1], RC [-2])" 'Perkėlimas į ląstelę kitoje eilutėje ActiveCell.Offset (1, 0). Pasirinkite ciklo diapazoną ("A15"). Pasirinkite Pabaigos antroji antroji kilpa 4 () „Vidutinio skaičiavimo“ ciklas „Daryti kol“ veiks tol, kol ankstesnio aktyviojo langelio stulpelis bus tuščias “Ši makrokomanda yra panaši į makrokomandą„ Loop3 “, vienintelis būdas taikyti sąlygą yra kitoks diapazonas („ C15 “). „Do while Not IsEmpty“ („ActiveCell.Offset“ (0, -1)) „ActiveCell.FormulaR1C1 =" = Vidutinis (RC [-1], RC [-2]) "ActiveCell.Offset (1, 0). Pasirinkite ciklo diapazoną (" A15 "). Pasirinkite Pasibaigus antriniam poskyriui5 () 'FOR ciklo kartojimai fiksuotam numanui kartų, nustatytų pagal eilučių skaičių Dim i, lastcell As Long 'Paskutinės eilutės, kurioje yra duomenų A stulpelyje, radimas lastcell = Diapazonas ("A" ir Cells.Rows.Count) .End (xlUp). Eilučių diapazonas ("C15 "). Pasirinkite" i kintamasis, kurio vertė yra 15, nes mūsų pavyzdiniai duomenys prasideda nuo 15 eilutės "FOR Loop bus ciklas x For i = 15 Iki lastcell ActiveCell. ]) "ActiveCell.Offset (1, 0). Pasirinkite Kitas i diapazonas (" A15 "). Pasirinkite Pabaigos antrąją antrinę kilpą Jis neskaičiuoja vidurkio, jei langelių diapazone ("G15") jau yra kažkas. Pasirinkite Do If IsEmpty (ActiveCell) Tada ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" Pabaiga Jei „ActiveCell.Offset“ (1, 0). Pasirinkite „Loop Before IsEmpty“ („ActiveCell.Offset“ (0, -1)) diapazonas („E15“). Pasirinkite „End Sub Sub Loop7“ () „Iki tol, kol ciklas veiks tol, kol bus kažkas ląstelėje kitame stulpelyje „Jis neskaičiuoja vidurkio, jei aktyviame c jau yra kažkas ell 'Taip pat, jei ląstelėse nėra duomenų, kurie naudojami pagal vidutinę funkciją (kad būtų išvengta #DIV/0 klaidų). 'Skaičiuojamas vidutinis diapazonas ("L15"). Pasirinkite Do If IsEmpty (ActiveCell) Tada If IsEmpty (ActiveCell.Offset (0, -1)) Ir IsEmpty (ActiveCell.Offset (0, -2)) Tada ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = vidurkis (RC [-1], RC [-2]) "End If End" Jei ActiveCell.Offset (1, 0). Pasirinkite ciklą iki IsEmpty (ActiveCell.Offset (0, 1)) Diapazonas („J15“). Pasirinkite Pabaigos antr 

Jei jums patiko šis tinklaraštis, pasidalykite juo su draugais „Facebook“. Be to, mus galite sekti „Twitter“ ir „Facebook“.

Mes norėtume išgirsti jūsų nuomonę, praneškite mums, kaip galime pagerinti savo darbą ir padaryti jį geresnį. Rašykite mums el