VBA за цикъл, Използване на цикли във VBA в Microsoft Excel

Anonim

В тази статия ние разгледахме различни видове контури, използвани във VBA, и как да ги използваме за изпълнение на една и съща задача по различни начини.

Защо цикли?

Циклирането е една от най -мощните техники за програмиране, използвани в много езици за програмиране. Циклирането се използва за повтаряне на блок код за необходимия брой пъти или докато дадено условие се изчисли като вярно или се достигне определена стойност, след което се изпълнява следващият блок код.

Целта на цикъла на VBA на Excel е да накара Excel да повтори парче код определен брой пъти. Може да се посочи колко пъти кодът трябва да се повтаря като фиксирано число (напр. Направете това 10 пъти) или като променлива (например направете това толкова пъти, колкото има редове с данни).

Примките на Excel могат да бъдат конструирани по различни начини, за да отговарят на различни обстоятелства. Често същите резултати могат да бъдат получени по различни начини, които да отговарят на вашите лични предпочитания.

В Excel VBA има три различни вида контури, които са:

1. НАПРАВЯЙТЕ ДО ОКОНЧАНЕ

2. НАПРАВЛЯВАЙТЕ ДОКАТО Цикъл

3. ЗА Цикъл

1. НАПРАВЕТЕ ДО ОКОНЧАНЕ

Цикълът DO UNTIL се използва за повтаряне на блок код за неопределено време, докато посоченото условие е зададено на True. Състоянието може да бъде проверено в началото или в края на цикъла. Операторът DO UNTIL… LOOP тества условието в началото, докато операторът DO… LOOP UNTIL тества състоянието в края на цикъла.

Синтаксис на операцията DO UNTIL… LOOP

Направете до [условие]

[Блок код да се повтаря]

Цикъл

Синтаксис на оператора DO… LOOP UNTIL

Направете

[Блок код да се повтаря]

Цикъл до [условие]

Обяснихме цикъл DO… UNTIL с пример. Макросите Loop1 и Loop2 се използват за изчисляване на средната стойност на числата в колона A и колона B, като се използва цикълът DO… UNTIL.

Примерни данни присъстват в диапазона A15: B27. Колона А съдържа резултати от Кръг 1, а колона Б съдържа резултати от Кръг 2. Искаме да изчислим средните стойности в Кръг 1 и Кръг 2 в колона В.

В макрос Loop1 използвахме „FormulaR1C1“, за да вмъкнем средната формула в активната клетка. Изявлението за условие в цикъла DO UNTIL се проверява в края на цикъла.

В макрос Loop2 използвахме „WorksheetFunction.Average“, за да вмъкнем средна стойност в активната клетка. Дори в този макрос изявлението за условие се проверява в края на цикъла.

Единствената разлика между макроса Loop1 и Loop2 е, че Loop1 вмъква средната формула, докато Loop2 изчислява средната стойност и след това вмъква средната стойност в активната клетка.

2. НАПРАВЛЯВАЙТЕ ДОКАТО Цикъл

Цикълът DO WHILE се използва за повтаряне на блок от код неопределен брой пъти, докато посоченото условие продължава да е True и спира, когато условието връща False. Състоянието може да бъде проверено в началото или в края на цикъла. Инструкцията DO WHILE… LOOP тества условието в началото, докато инструкцията DO… LOOP WHILE тества условието в края на цикъла. Инструкцията DO… LOOP WHILE се използва, когато искаме цикълът да изпълни блока от код поне веднъж, преди да проверим за условието.

Синтаксис на инструкцията DO WHILE… LOOP

Направете докато [условие]

[Блок код да се повтаря]

Цикъл

Синтаксис на оператора DO… LOOP WHILE

Направете

[Блок код да се повтаря]

Цикъл докато [състояние]

В този пример макросите Loop3 и Loop4 се използват за изчисляване на средните стойности в клетките на колони А и колона В. И двата макроса работят върху същите примерни данни, използвани от макросите Loop1 и Loop2. И двете използват оператора DO WHILE, за да преминат през диапазона, който съдържа данните.

Единствената разлика между макросите Loop3 и Loop4 е, че те са различни начини за представяне на условията на цикъла DO WHILE.

Тъй като макросите Loop3 и Loop4 използват същите входни данни и дори изпълняват същите функции като макроса Loop1, така че върнатият изход също ще бъде същият като този на макроса Loop1.

3. цикъл FOR

For Loop се използва за повтаряне на блок код за определен брой пъти.

Синтаксис на цикъла FOR

За count_variable = start_value До end_value

[блок код]

Следваща count_variable

Макросът Loop5 показва как да използвате цикъла FOR за изчисляване на средната стойност. Той също така използва същите примерни данни, използвани от други макроси. Използвахме 15 като начална стойност, тъй като примерните данни започват от 15th ред. Използвахме Range ("A" & Cells.Rows.Count) .End (xlUp) .Row за намиране на последния ред, съдържащ данни. Цикълът FOR ще се повтори (lastcell- 15) брой пъти.

Изходът, върнат след стартиране на макрос Loop5, е същият като този на макрос Loop1.

Макрос Loop6 е създаден за изчисляване на средната стойност, само ако активната клетка, която ще има средната функция, е празна, преди да стартира макроса.

Примерни данни за този макрос присъстват в диапазона E15 до G27.

Използвахме DO… LOOP WHILE, за да преминем през определения диапазон. Изразът IF се използва за проверка дали клетката, в която ще бъде вмъкната функция, съдържа стойност. Този макрос ще вмъкне средната функция в клетката само ако е празна.

Loop7 макрос също се използва за изчисляване на средната стойност. Той проверява за стойности в помощната колона, преди да прецени дали да се повтори отново. Той също така проверява дали препратката към клетката, която ще се използва в средната функция, е празна.

Примерните данни, използвани за макрос Loop7, са в диапазона J15: M27.

Колона М се използва като помощна колона. Този макрос ще вмъкне средна функция само ако клетка в колона М не е празна. Този макрос проверява дали клетката трябва да е празна, преди да вмъкне в нея средна функция. Той няма да вмъкне средна функция, ако клетката, посочена в средната функция, е празна.

Моля, следвайте кода по -долу

 Опция Explicit Sub Loop1 () 'Изчисляване на средната стойност' Цикълът Do Do ще се върти, докато клетката в предишната колона на активната клетка е празна Обхват ("C15"). Изберете Do 'Присвояване на средна функция за стойност в клетки от предишни две последователни колони ActiveCell. Формула R1C1 = "= Средна (RC [-1], RC [-2])" '' Преместване в клетка в следващия ред ActiveCell.Offset (1, 0). Изберете 'Проверка дали стойността в клетката на предишната колона е празна' Направете до цикъл ще циклира, докато изявлението на условието не върне True Loop до IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Изберете End Sub Sub Loop2 () "Изчисляване на средната стойност" До До цикълът ще циклира до клетката в предишната колоната на активната клетка е празна 'Този макрос е подобен на макрос Loop1, единственият начин за изчисляване на средната стойност е различен Range ("C15"). Изберете Do' Worsheet.Средната функция се използва за изчисляване на средната стойност ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0). Изберете цикъл до IsEmpty (ActiveCel l.Offset (0, -1)) Диапазон ("A15"). Изберете End Sub Sub Loop3 () "Изчисляване на средната стойност" Цикълът Do Do ще работи, докато клетката в предишната колона на активната клетка е празна Диапазон ("C15") .Изберете "Проверка дали стойността в клетката на предишната колона е празна" Цикълът До докато ще се върти, докато израза на условието е Истински До Докато IsEmpty (ActiveCell.Offset (0, -1)) = False две последователни колони ActiveCell.FormulaR1C1 = "= Средно (RC [-1], RC [-2])" 'Преместване в клетка в следващия ред ActiveCell.Offset (1, 0). Изберете диапазон на цикъл ("A15"). Изберете End Sub Sub Loop4 () „Изчисляване на средната стойност“ Цикълът „До“ ще работи, докато клетката в предишната колона на активната клетка е празна. „Този ​​макрос е подобен на макроса Loop3, единственият начин за прилагане на условие е различен диапазон („ C15 “). Изберете Докато не е IsEmpty (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Средно (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Изберете диапазон на цикъл (" A15 "). Изберете End Sub Sub Loop5 () 'FOR цикълът се повтаря за фиксирано вцепенение след време, определено от броя редове Dim i, lastcell As Long 'Намиране на последния ред, съдържащ данни в колона A lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp) .Row Range ("C15 "). Изберете" i променливата е присвоена стойност 15, тъй като нашите примерни данни започват от 15-ти ред "FOR Loop ще се върти x For i = 15 За последната клетка ActiveCell.FormulaR1C1 =" = Средно (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Изберете Next i Range (" A15 "). Изберете End Sub Sub Loop6 ()" Изчисляване на средната стойност "Цикълът Do Do ще се върти, докато клетката в предишната колона на активната клетка е празна" Той не изчислява средна стойност, ако вече има нещо в диапазона на клетките ("G15"). Изберете Do If IsEmpty (ActiveCell) Тогава ActiveCell.FormulaR1C1 = "= Средно (RC [-1], RC [-2])" Край, ако ActiveCell.Offset (1, 0). Изберете Loop Until IsEmpty (ActiveCell.Offset (0, -1)) Range ("E15"). Изберете End Sub Sub Loop7 () 'Do While цикълът работи, докато има нещо в клетката в следващата колона „Не изчислява средна стойност, ако вече има нещо в активния c ell 'Нито ако в клетките няма данни, които се използват в рамките на средната функция (за да се избегнат грешки #DIV/0). "Изчисляване на среден обхват (" L15 "). Изберете Do If IsEmpty (ActiveCell) then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) then ActiveCell.Value =" "Else ActiveCell.FormulaR1C1 =" = Average (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0). Изберете цикъл до IsEmpty (ActiveCell.Offset (0, 1)) Диапазон ("J15"). Изберете End Sub 

Ако този блог ви е харесал, споделете го с приятелите си във Facebook. Също така можете да ни следвате в Twitter и Facebook.

Ще се радваме да чуем от вас, уведомете ни как можем да подобрим работата си и да я направим по -добра за вас. Пишете ни на имейл сайта