VBA cilpai, cilpu izmantošana VBA programmā Microsoft Excel

Anonim

Šajā rakstā mēs esam apskatījuši dažāda veida cilpas, kas tiek izmantotas VBA, un to, kā tos izmantot viena un tā paša uzdevuma izpildei dažādos veidos.

Kāpēc cilpas?

Looping ir viena no visspēcīgākajām programmēšanas metodēm, ko izmanto daudzās programmēšanas valodās. Looping tiek izmantots, lai atkārtotu koda bloku vajadzīgo skaitu reižu vai līdz brīdim, kad konkrētais nosacījums tiek novērtēts kā patiess vai tiek sasniegta noteikta vērtība, pēc kura tiek izpildīts nākamais koda bloks.

Excel VBA cilpas mērķis ir likt programmai Excel atkārtot koda gabalu noteiktu skaitu reižu. Var norādīt, cik reizes kods ir jāatkārto kā fiksēts skaitlis (piemēram, dariet to 10 reizes) vai kā mainīgs (piemēram, dariet to tik reižu, cik ir datu rindu).

Excel cilpas var veidot dažādos veidos, lai tie atbilstu dažādiem apstākļiem. Bieži vien tos pašus rezultātus var iegūt dažādos veidos, lai tie atbilstu jūsu personīgajām vēlmēm.

Programmā Excel VBA ir pieejami trīs dažādi cilpu veidi:

1. DARĪT LĪDZ cilpu

2. DARIET, kamēr cilpa

3. PAR Loop

1. DARĪT LĪDZ cilpu

Cilne DO UNTIL tiek izmantota koda bloka atkārtošanai uz nenoteiktu laiku, līdz norādītais nosacījums ir iestatīts uz True. Stāvokli var pārbaudīt cikla sākumā vai beigās. Paziņojums DO UNTIL… LOOP pārbauda stāvokli sākumā, bet DO… LOOP UNTIL paziņojums pārbauda stāvokli cikla beigās.

DO UNTIL… LOOP paziņojuma sintakse

Darīt līdz [nosacījums]

[Atkārtojams koda bloks]

Cilpa

Paziņojuma DO… LOOP LĪDZ sintakse

Vai

[Atkārtojams koda bloks]

Cikls līdz [nosacījums]

Mēs esam izskaidrojuši DO … LĪDZ cilpu ar piemēru. Loop1 un Loop2 makro tiek izmantoti, lai aprēķinātu vidējo skaitli A slejā un B slejā, izmantojot cilni DO… UNTIL.

Parauga dati ir diapazonā A15: B27. A slejā ir 1. kārtas rezultāti, bet B slejā - 2. kārtas rezultāti. Mēs vēlamies aprēķināt vidējos rādītājus 1. un 2. kārtā C slejā.

Loop1 makro mēs esam izmantojuši “FormulaR1C1”, lai aktīvajā šūnā ievietotu vidējo formulu. Cilpas DO UNTIL cikla stāvokļa paziņojums tiek pārbaudīts cikla beigās.

Loop2 makro mēs esam izmantojuši “WorksheetFunction.Average”, lai aktīvajā šūnā ievietotu vidējo vērtību. Pat šajā makro nosacījuma paziņojums tiek pārbaudīts cikla beigās.

Vienīgā atšķirība starp Loop1 un Loop2 makro ir tā, ka Loop1 ievieto vidējo formulu, turpretī Loop2 aprēķina vidējo un pēc tam ievieto vidējo vērtību aktīvajā šūnā.

2. DARIET, kamēr cilpa

Cikls DO WHILE tiek izmantots, lai atkārtotu koda bloku nenoteiktu skaitu reižu, kamēr norādītais nosacījums turpina būt True un apstājas, kad nosacījums atgriež False. Stāvokli var pārbaudīt cikla sākumā vai beigās. Paziņojums DO WHILE… LOOP pārbauda stāvokli sākumā, bet DO… LOOP WHILE paziņojums pārbauda stāvokli cikla beigās. Teikums DO… LOOP WHILE tiek izmantots, ja mēs vēlamies, lai cilpa vismaz vienu reizi palaistu koda bloku pirms nosacījuma pārbaudes.

Paziņojuma DO WHILE… LOOP sintakse

Darīt, kamēr [stāvoklis]

[Atkārtojams koda bloks]

Cilpa

Paziņojuma DO… LOOP WHILA sintakse

Vai

[Atkārtojams koda bloks]

Cikls [stāvoklis]

Šajā piemērā Loop3 un Loop4 makro tiek izmantoti, lai aprēķinātu vidējos rādītājus A slejas un B slejas šūnās. Abi makro darbojas ar tiem pašiem izlases datiem, ko izmanto makro Loop1 un Loop2. Abi izmanto DO WHILE paziņojumu, lai pārvietotos pa diapazonu, kurā ir dati.

Vienīgā atšķirība starp Loop3 un Loop4 makro ir tā, ka tie ir dažādi veidi, kā attēlot cikla DO WHILE nosacījumus.

Tā kā Loop3 un Loop4 makro izmanto tos pašus ievades datus un pat veic tādas pašas funkcijas kā Loop1 makro, tāpēc atgrieztā izvade būs tāda pati kā Loop1 makro.

3. FOR cilpa

Cilpa For Loop tiek izmantota koda bloka atkārtošanai noteiktu reižu skaitu.

FOR cilpas sintakse

Par count_variable = start_value Uz end_value

[koda bloks]

Nākamais skaits mainīgais

Loop5 makro parāda, kā izmantot FOR cilpu, lai aprēķinātu vidējo. Tas izmanto arī tos pašus datu paraugus, ko izmanto citi makro. Mēs esam izmantojuši 15 kā sākuma vērtību, jo parauga dati sākas no 15tūkst rinda. Mēs izmantojām diapazonu ("A" & Cells.Rows.Count) .End (xlUp) .Row, lai atrastu pēdējo rindu, kurā ir dati. FOR cilpa atkārtosies (pēdējā šūnā- 15) vairākas reizes.

Pēc Loop5 makro palaišanas atgrieztā izlaide ir tāda pati kā Loop1 makro.

Loop6 makro tiek izveidots, lai aprēķinātu vidējo tikai tad, ja aktīvā šūna, kurai būs vidējā funkcija, ir tukša pirms makro palaišanas.

Šī makro parauga dati ir diapazonā no E15 līdz G27.

Mēs esam izmantojuši DO… LOOP WHILE, lai pārvietotos pa noteikto diapazonu. IF paziņojums tiek izmantots, lai pārbaudītu, vai šūna, kurā tiks ievietota funkcija, satur vērtību. Šis makro šūnā ievietos vidējo funkciju tikai tad, ja tā ir tukša.

Loop7 makro tiek izmantots arī vidējā aprēķināšanai. Tas pārbauda, ​​vai palīga kolonnā ir vērtības, pirms tiek izvērtēts, vai atkārtot cilpu. Tas arī pārbauda, ​​vai šūnu atsauce, kas jāizmanto vidējā funkcijā, ir tukša.

Loop7 makro izmantojamie datu paraugi ir diapazonā J15: M27.

Kolonna M tiek izmantota kā palīgkolonna. Šis makro ievietos vidējo funkciju tikai tad, ja M kolonnas šūna nav tukša. Šis makro pārbauda, ​​vai šūnai ir jābūt tukšai, pirms tajā ievietojat vidējo funkciju. Ja vidējā funkcijā norādītā šūna ir tukša, tajā netiks ievietota vidējā funkcija.

Lūdzu, sekojiet tālāk norādītajam kodam

 Opcija Explicit Sub Loop1 () 'Aprēķina vidējo' Darīt līdz cilpa cilpās, līdz šūna iepriekšējā aktīvās šūnas kolonnā ir tukša. Diapazons ("C15"). Atlasiet "Do". FormulaR1C1 = "= Vidējais (RC [-1], RC [-2])" "Pārvietošanās uz šūnu nākamajā rindā ActiveCell.Pārvietojums (1, 0). Atlasiet" Pārbaude, vai vērtība iepriekšējās kolonnas šūnā ir tukša "Darīt līdz cilpa cilpos, līdz nosacījuma paziņojums atgriezīs True Loop līdz IsEmpty (ActiveCell.Offset (0, -1)) Diapazons ("A15"). Atlasiet beigu apakšapakšu cilpu aktīvās šūnas kolonna ir tukša 'Šis makro ir līdzīgs makro Loop1, vienīgais veids, kā aprēķināt vidējo, ir atšķirīgs Diapazons ("C15"). Atlasiet Do' Worsheet.Average funkcija tiek izmantota, lai aprēķinātu vidējo ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0). Atlasiet cilpu līdz IsEmpty (ActiveCel l. Nobīde (0, -1)) Diapazons ("A15"). Atlasiet beigu apakšapakšu cilpu . Atlasiet “Pārbaudīt, vai vērtība iepriekšējās kolonnas šūnā ir tukša” Darīt cikla cilpa, kamēr nosacījuma paziņojums ir patiess Vai darīt, kamēr IsEmpty (ActiveCell.Offset (0, -1)) = False ”Vidējās funkcijas piešķiršana vērtībai iepriekšējās šūnās divas secīgas kolonnas ActiveCell.FormulaR1C1 = "= Vidējais (RC [-1], RC [-2])" 'Pārvietošanās uz šūnu nākamajā rindā ActiveCell.Pārvietojums (1, 0). Atlasiet cilpas diapazonu ("A15"). Beigas Apakšcilpas cilpa4 () 'Vidējā aprēķināšana' Darīt kamēr cilpa darbosies, līdz šūna aktīvās šūnas iepriekšējā kolonnā būs tukša 'Šis makro ir līdzīgs makro Loop3, vienīgais nosacījuma piemērošanas veids ir atšķirīgs diapazons ("C15"). Darīt, kamēr nav tukšs (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Vidējais (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Atlasiet cilpas diapazonu (" A15 "). Izvēlieties Beigt apakšapakšcilpu 5 ()" FOR cilpas atkārtojumi fiksētam numuram reižu skaits, ko nosaka rindu skaits Dim i, lastcell As Long 'Pēdējās rindas, kurā ir dati A slejā, atrašana lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp). Row Range ("C15 "). Izvēlieties mainīgajam" i "mainīgo vērtību 15, jo mūsu izlases dati sākas no 15. rindas" FOR Loop cilpa x For i = 15 Līdz pēdējai šūnai ActiveCell.FormulaR1C1 = "= Vidējais (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Atlasiet Nākamais i diapazons (" A15 "). Atlasiet beigu apakšapkārt cilpu6 () 'Aprēķinot vidējo' Darīt, līdz cilpa cilpās, līdz šūna aktīvās šūnas iepriekšējā kolonnā ir tukša ' Tas neaprēķina vidējo, ja šūnu diapazonā ("G15") jau ir kaut kas. Atlasiet Do If IsEmpty (ActiveCell) Tad ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" Beigt, ja ActiveCell.Pārvietojums (1, 0). Atlasiet cilpu līdz cilnei IsEmpty (ActiveCell.Offset (0, -1)) diapazons ("E15"). Atlasiet beigu apakš apakškopu kaut kas šūnā nākamajā slejā 'Tas neaprēķina vidējo, ja aktīvajā c jau ir kaut kas ell 'Tāpat, ja šūnās nav datu, kas tiek izmantoti vidējās funkcijas ietvaros (lai izvairītos no #DIV/0 kļūdām). 'Aprēķina vidējo diapazonu ("L15"). Atlasiet Do If IsEmpty (ActiveCell) Tad If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Tad ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = vidējais (RC [-1], RC [-2]) "Beigas, ja beigas, ja ActiveCell.Pārvietojums (1, 0). Atlasiet cilpu līdz IsEmpty (ActiveCell.Offset (0, 1)) Diapazons ("J15"). Atlasiet Beigt apakš 

Ja jums patika šis emuārs, kopīgojiet to ar saviem draugiem Facebook. Varat arī sekot mums Twitter un Facebook.

Mēs labprāt uzklausītu jūsu viedokli, dariet mums zināmu, kā mēs varam uzlabot savu darbu un padarīt to labāku jums. Rakstiet mums e -pasta vietnē