V tem članku smo obravnavali različne vrste zank, ki se uporabljajo v VBA, in kako jih uporabiti za izvajanje iste naloge na različne načine.
Zakaj zanke?
Ponavljanje je ena najmočnejših programskih tehnik, ki se uporablja v številnih programskih jezikih. Zank se uporablja za ponavljanje bloka kode zahtevano število krat ali dokler se določeno stanje ne oceni kot resnično ali ne doseže določene vrednosti, po katerem se izvede naslednji blok kode.
Namen zanke Excel VBA je, da Excel določeno število krat ponovi kodo. Določite lahko, kolikokrat je treba kodo ponoviti kot fiksno število (na primer to storite 10 -krat) ali kot spremenljivko (na primer to storite tolikokrat, kolikor je vrstic podatkov).
Excel zanke lahko sestavite na različne načine, da ustrezajo različnim okoliščinam. Pogosto je mogoče enake rezultate doseči na različne načine, ki ustrezajo vašim osebnim željam.
V Excelu VBA so na voljo tri različne vrste zank, in sicer:
1. NAREDITE DO ZANAKA
2. NAPRAVI V ZMIRI
3. ZA zanko
1. NAREDITE DO ZANAKA
Zanka DO UNTIL se uporablja za ponavljanje bloka kode v nedogled, dokler podani pogoj ni nastavljen na True. Stanje je mogoče preveriti na začetku ali na koncu zanke. Stavek DO UNTIL… LOOP preizkusi stanje na začetku, medtem ko stavek DO… LOOP UNTIL preizkusi stanje na koncu zanke.
Sintaksa stavka DO UNTIL… LOOP
Naredi do [Pogoj]
[Blok kode se ponovi]
Zanka
Sintaksa stavka DO… LOOP UNTIL
Naredi
[Blok kode se ponovi]
Zanka do [Pogoj]
Zanko DO… UNTIL smo razložili s primerom. Makrona zanka1 in zanka2 se uporabljata za izračun povprečja številk v stolpcu A in stolpcu B z uporabo zanke DO… UNTIL.
Vzorčni podatki so prisotni v območju A15: B27. Stolpec A vsebuje ocene 1. kroga, stolpec B pa rezultate 2. kroga. Izračunati želimo povprečja rezultatov v 1. krogu in 2. krog v stolpcu C.
V mapu Loop1 smo uporabili “FormulaR1C1” za vstavljanje povprečne formule v aktivno celico. Stavek stanja v zanki DO UNTIL se preveri na koncu zanke.
V mapu Loop2 smo uporabili “WorksheetFunction.Average” za vstavljanje povprečne vrednosti v aktivno celico. Tudi v tem makru se stavek pogoja preveri na koncu zanke.
Edina razlika med makrom Loop1 in Loop2 je v tem, da Loop1 vstavi povprečno formulo, medtem ko Loop2 izračuna povprečje in nato vstavi povprečno vrednost v aktivno celico.
2. NAPRAVI V ZMIRI
Zanka DO WHILE se uporablja za ponavljanje bloka kode neomejeno število krat, medtem ko je podani pogoj še naprej True in se ustavi, ko pogoj vrne False. Stanje lahko preverite na začetku ali na koncu zanke. Stavek DO WHILE… LOOP preizkusi stanje na začetku, medtem ko stavek DO… LOOP WHILE preizkusi stanje na koncu zanke. Stavek DO… LOOP WHILE se uporablja, ko želimo, da zanka vsaj enkrat izvede blok kode, preden preveri stanje.
Sintaksa stavka DO WHILE… LOOP
Naredi [Stanje]
[Blok kode se ponovi]
Zanka
Sintaksa stavka DO… LOOP WHILE
Naredi
[Blok kode se ponovi]
Zanka med [Stanje]
V tem primeru se makra Loop3 in Loop4 uporabljata za izračun povprečja vrednosti v celicah stolpca A in stolpca B. Oba makra delujeta na istih vzorčnih podatkih, kot jih uporabljata makra Loop1 in Loop2. Oba uporabljata stavek DO WHILE za prehod skozi obseg, ki vsebuje podatke.
Edina razlika med makroma Loop3 in Loop4 je, da so različni načini predstavljanja pogojev zanke DO WHILE.
Ker makra Loop3 in Loop4 uporabljata iste vhodne podatke in celo opravljata iste funkcije kot makro Loop1, tako da bo vrnjeni izhod enak kot pri makroju Loop1.
3. zanka FOR
For Loop se uporablja za ponavljanje bloka kode določeno število krat.
Sintaksa zanke FOR
Za count_variable = start_value Do end_value
[blok kode]
Naslednja count_variable
Makro Loop5 prikazuje, kako z zanko FOR izračunati povprečje. Uporablja tudi iste vzorčne podatke, ki jih uporabljajo drugi makri. Kot začetno vrednost smo uporabili 15, saj se vzorčni podatki začnejo s 15th vrstici. Uporabili smo Range ("A" & Cells.Rows.Count) .End (xlUp) .Row za iskanje zadnje vrstice s podatki. Zanka FOR se bo (zadnja celica-15) ponovila tolikokrat.
Izhod, vrnjen po zagonu makra Loop5, je enak tistemu makra Loop1.
Makro zanke 6 je ustvarjen za izračun povprečja, le če je aktivna celica, ki bo imela funkcijo povprečja, pred zagonom makra prazna.
Vzorčni podatki za ta makro so prisotni v območju E15 do G27.
Uporabili smo DO… LOOP WHILE za prehod skozi definirano območje. Stavek IF se uporablja za preverjanje, ali celica, v katero bo vstavljena funkcija, vsebuje vrednost. Ta makro bo v celico vstavil povprečno funkcijo le, če je prazna.
Makro Loop7 se uporablja tudi za izračun povprečja. Preden preveri vrednosti v stolpcu pomočnikov, oceni, ali naj se znova ponovi. Prav tako preveri, ali je sklic na celico, ki se uporablja v povprečni funkciji, prazen.
Vzorčni podatki, uporabljeni za makro Loop7, so v območju J15: M27.
Stolpec M se uporablja kot pomožni stolpec. Ta makro bo vstavil povprečno funkcijo le, če celica v stolpcu M ni prazna. Ta makro preveri, ali mora biti celica prazna, preden vanj vstavi povprečno funkcijo. Ne bo vstavila povprečne funkcije, če je celica, navedena v povprečni funkciji, prazna.
Za kodo sledite spodaj
Možnost Explicit Sub Loop1 () 'Izračunavanje povprečja' Zank Do Do bo zankal, dokler celica v prejšnjem stolpcu aktivne celice ni prazna Obseg ("C15"). Izberite Do "Dodelitev povprečne funkcije vrednosti v celicah prejšnjih dveh zaporednih stolpcev ActiveCell. FormulaR1C1 = "= Povprečje (RC [-1], RC [-2])" 'Premik v celico v naslednji vrstici ActiveCell.Offset (1, 0). Izberite' Preverjanje, ali je vrednost v celici prejšnjega stolpca prazna 'Do Do zanka se bo zankala, dokler stavek pogoja ne vrne True Loop Until IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Izberite End Sub Sub Loop2 () "Izračunavanje povprečja" Do Do bo zanka do celice v prejšnji stolpec aktivne celice je prazen 'Ta makro je podoben makroju Loop1, edini način izračuna povprečja je drugačen Range ("C15"). Izberite Do' Worsheet. Funkcija Povprečje se uporablja za izračun povprečja ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Vrednost, _ ActiveCell.Offset (0, -2) .Vrednost) ActiveCell.Offset (1, 0). Izberite zanko do IsEmpty (ActiveCel l. Odmik (0, -1)) Obseg ("A15"). Izberite End Sub Sub Loop3 () 'Izračunavanje povprečja' Zanka Do While bo delovala, dokler celica v prejšnjem stolpcu aktivne celice ni prazna Obseg ("C15") .Izberite 'Preverjanje, ali je vrednost v celici prejšnjega stolpca prazna' Do zanka Do se bo zankala, dokler izjava pogoja ni True Do While IsEmpty (ActiveCell.Offset (0, -1)) = False 'Dodelitev povprečne funkcije vrednosti v celicah prejšnjega dva zaporedna stolpca ActiveCell.FormulaR1C1 = "= Povprečje (RC [-1], RC [-2])" 'Premik v celico v naslednji vrstici ActiveCell.Offset (1, 0). Izberite obseg zanke ("A15"). Izberite End Sub Sub Loop4 () 'Izračunavanje povprečja' zanka Do While bo delovala, dokler celica v prejšnjem stolpcu aktivne celice ni prazna 'Ta makro je podoben makroju Loop3, edini način uporabe pogoja je drugačen Range ("C15"). Izberite Naredi, medtem ko ni prazno (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Povprečje (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Izberite obseg zanke (" A15 "). Izberite End Sub Sub Loop5 () 'Zanka FOR se ponavlja za fiksno omrtvičenje časi, določeni s številom vrstic Dim i, lastcell As Long 'Iskanje zadnje vrstice, ki vsebuje podatke v stolpcu A lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp) .Row Range ("C15 "). Spremenljivki" i je dodeljena vrednost 15, saj se naši vzorčni podatki začnejo od 15. vrstice "FOR Loop will loop x For i = 15 To lastcell ActiveCell.FormulaR1C1 =" = Average (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Izberite Next i Range (" A15 "). Izberite End Sub Sub Loop6 ()" Izračunavanje povprečja "Zveza Do Do se bo zankala, dokler celica v prejšnjem stolpcu aktivne celice ni prazna" Ne izračuna povprečja, če je že nekaj v obsegu celic ("G15"). Izberite Do If IsEmpty (ActiveCell) Potem ActiveCell.FormulaR1C1 = "= Povprečje (RC [-1], RC [-2])" Končaj, če ActiveCell.Offset (1, 0). Izberite zanko do IsEmpty (ActiveCell.Offset (0, -1)) Range ("E15"). Izberite End Sub Sub Loop7 () 'Do Dokler zanka deluje, dokler obstaja nekaj v celici v naslednjem stolpcu 'Ne izračuna povprečja, če je nekaj že v aktivnem c ell 'Niti če v celicah ni podatkov, ki se uporabljajo v okviru povprečne funkcije (da bi se izognili napakam #DIV/0). 'Izračunavanje povprečnega obsega ("L15"). Izberite Naredi, če je IsEmpty (ActiveCell) Potem If IsEmpty (ActiveCell.Offset (0, -1)) In IsEmpty (ActiveCell.Offset (0, -2)) Potem ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Average (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0). Izberite zanko do IsEmpty (ActiveCell.Offset (0, 1)) Razpon ("J15"). Izberite End Sub
Če vam je bil ta blog všeč, ga delite s prijatelji na Facebooku. Prav tako nam lahko sledite na Twitterju in Facebooku.
Radi bi slišali od vas, nam sporočite, kako lahko izboljšamo svoje delo in ga izboljšamo za vas. Pišite nam na spletnem mestu e -pošte