ВБА за петљу, коришћење петљи у ВБА у Мицрософт Екцелу

Anonim

У овом чланку смо обрадили различите врсте петљи које се користе у ВБА и како их користити за постизање истог задатка на различите начине.

Зашто петље?

Петља је једна од најмоћнијих техника програмирања која се користи у многим програмским језицима. Петља се користи за понављање блока кода потребан број пута или док се дати услов не оцени као тачно или се не постигне одређена вредност, након чега се извршава следећи блок кода.

Сврха Екцел ВБА петље је да натера Екцел да понавља део кода одређени број пута. Може се одредити колико пута се код мора поновити као фиксни број (нпр. Урадите ово 10 пута) или као променљиву (нпр. Урадите то онолико пута колико има редова података).

Екцел петље се могу конструисати на различите начине како би одговарале различитим околностима. Често се исти резултати могу постићи на различите начине који одговарају вашим личним преференцијама.

У Екцел ВБА постоје три различите врсте петљи, а то су:

1. УЧИНИТЕ ДО ПОКРЕТАЊА

2. УЧИНИТЕ ДОК ЈЕ Петља

3. ЗА Петља

1. УЧИНИТЕ ДО ПОКРЕТАЊА

ДО УНТИЛ петља се користи за понављање блока кода неограничено дуго, док се наведени услов не постави на Тачно. Стање се може проверити на почетку или на крају петље. Наредба ДО УНТИЛ… ЛООП тестира стање на почетку, док наредба ДО… ЛООП УНТИЛ тестира стање на крају петље.

Синтакса наредбе ДО УНТИЛ… ЛООП

Радити до [Услов]

[Блок кода се понавља]

Лооп

Синтакса наредбе ДО… ЛООП УНТИЛ

Урадити

[Блок кода се понавља]

Петља до [Стање]

Објаснили смо пример ДО… УНТИЛ петље са примером. Макрои Лооп1 и Лооп2 користе се за израчунавање просека бројева у колони А и колони Б помоћу петље ДО… УНТИЛ.

Узорци података су присутни у опсегу А15: Б27. Колона А садржи резултате 1. круга, а колона Б садржи резултате 2. круга. Желимо да израчунамо просеке резултата у 1. кругу и 2. круг у колони Ц.

У макроу Лооп1 користили смо „ФормулаР1Ц1“ за уметање просечне формуле у активну ћелију. Наредба услова у петљи ДО УНТИЛ се проверава на крају петље.

У макроу Лооп2 користили смо „ВорксхеетФунцтион.Авераге“ за уметање просечне вредности у активну ћелију. Чак иу овом макроу, исказ услова се проверава на крају петље.

Једина разлика између макроа Лооп1 и Лооп2 је у томе што Лооп1 уноси просечну формулу, док Лооп2 израчунава просек и затим убацује просечну вредност у активну ћелију.

2. УЧИНИТЕ ДОК ЈЕ Петља

ДО ВХИЛЕ петља се користи за понављање блока кода неограничени број пута, док наведени услов наставља да буде Тачан и зауставља се када услов враћа Фалсе. Стање се може проверити на почетку или на крају петље. Наредба ДО ВХИЛЕ… ЛООП тестира стање на почетку, док наредба ДО… ЛООП ВХИЛЕ тестира стање на крају петље. Наредба ДО… ЛООП ВХИЛЕ се користи када желимо да петља покрене блок кода најмање једном пре него што провери стање.

Синтакса наредбе ДО ВХИЛЕ… ЛООП

Урадити Док [Услов]

[Блок кода се понавља]

Лооп

Синтакса наредбе ДО… ЛООП ВХИЛЕ

Урадити

[Блок кода се понавља]

Петља док [Стање]

У овом примеру, макрои Лооп3 и Лооп4 се користе за израчунавање просека за вредности у ћелијама колоне А и колоне Б. Оба макроа раде на истим узорцима које користе макрои Лооп1 и Лооп2. Обојица користе наредбу ДО ВХИЛЕ за петљу кроз опсег који садржи податке.

Једина разлика између макроа Лооп3 и Лооп4 је у томе што су то различити начини представљања услова петље ДО ВХИЛЕ.

Како макрои Лооп3 и Лооп4 користе исте улазне податке, па чак и изводе исте функције као и макро Лооп1, тако да ће враћени излаз бити исти као и код макроа Лооп1.

3. ФОР петља

Фор Лооп се користи за понављање блока кода одређени број пута.

Синтакса ФОР петље

За цоунт_вариабле = старт_валуе До енд_валуе

[блок кода]

Следећа цоунт_вариабле

Макро петље 5 показује како се помоћу петље ФОР израчунава просек. Такође користи исте узорке података које користе и други макрои. Користили смо 15 као почетну вредност јер узорци података почињу од 15тх ред. Користили смо Ранге ("А" & Целлс.Ровс.Цоунт) .Енд (клУп) .Ров да пронађемо последњи ред који садржи податке. ФОР петља ће се поновити (ластцелл- 15) број пута.

Излаз враћен након покретања макроа Лооп5 исти је као и макроа Лооп1.

Макро петље 6 је креиран за израчунавање просека, само ако је активна ћелија која ће имати функцију просека празна пре покретања макроа.

Узорци података за овај макро присутни су у опсегу Е15 до Г27.

Користили смо ДО… ​​ЛООП ВХИЛЕ за петљу кроз дефинисани опсег. Наредба ИФ се користи за проверу да ли ћелија у коју ће функција бити уметнута садржи вредност. Овај макро ће уметнути просечну функцију у ћелију само ако је празна.

Макро Лооп7 се такође користи за израчунавање просека. Он проверава вредности у помоћној колони пре него што процени да ли треба поново да се петљи. Такође проверава да ли је референца ћелије која се користи у просечној функцији празна.

Узорци података који се користе за макро Лооп7 налазе се у опсегу Ј15: М27.

Колона М се користи као помоћна колона. Овај макро ће уметнути просечну функцију само ако ћелија у колони М није празна. Овај макро проверава да ли ћелија треба да буде празна пре него што у њу убаци просечну функцију. Неће уметнути просечну функцију ако је ћелија наведена у просечној функцији празна.

Молимо следите доле за код

 Опција Експлицитна суб петља1 () 'Израчунавање просека' Петља До До ће се петљати све док ћелија у претходној колони активне ћелије не буде празна Опсег ("Ц15"). Одаберите До 'Додељивање просечне функције вредности у ћелијама претходне две узастопне колоне АцтивеЦелл. ФормулаР1Ц1 = "= Просек (РЦ [-1], РЦ [-2])" '' Прелазак на ћелију у следећем реду АцтивеЦелл.Оффсет (1, 0). Одаберите 'Провера да ли је вредност у ћелији претходне колоне празна' До До петља ће се петљати све док израз стања не врати Труе Лооп Унтил ИсЕмпти (АцтивеЦелл.Оффсет (0, -1)) Ранге ("А15"). Одаберите Енд Суб Суб Лооп2 () 'Израчунавање просека' Урадите петљу до ћелије у претходној колона активне ћелије је празна 'Овај макро је сличан макроу Лооп1, једини начин израчунавања просека је другачији опсег ("Ц15"). Изаберите Учини "Ворсхеет. Функција Просек се користи за израчунавање просека АцтивеЦелл.Валуе = ВорксхеетФунцтион.Авераге ( АцтивеЦелл.Оффсет (0, -1) .Валуе, _ АцтивеЦелл.Оффсет (0, -2) .Валуе) АцтивеЦелл.Оффсет (1, 0). Одаберите Лооп унтил ИсЕмпти (АцтивеЦел л.Оффсет (0, -1)) Опсег ("А15"). Одаберите Енд Суб Суб Лооп3 () 'Израчунавање просека' До Вхиле петља ће се покретати све док ћелија у претходној колони активне ћелије не буде празна Опсег ("Ц15") .Одаберите 'Провера да ли је вредност у ћелији претходне колоне празна' Петља До Док ће се петљати све док израз услова не буде Тачан До Док је ИсЕмпти (АцтивеЦелл.Оффсет (0, -1)) = Нетачно 'Додељивање просечне функције вредности у ћелијама претходне две узастопне колоне АцтивеЦелл.ФормулаР1Ц1 = "= Просек (РЦ [-1], РЦ [-2])" '' Прелазак на ћелију у следећем реду АцтивеЦелл.Оффсет (1, 0). Изаберите опсег петље ("А15"). Изаберите Енд Суб Лооп4 () 'Израчунавање просека' До Вхиле петља ће радити све док ћелија у претходној колони активне ћелије не буде празна 'Овај макро је сличан макроу Лооп3, једини начин примене услова је другачији опсег ("Ц15"). Изаберите Учинити Док Није ИсЕмпти (АцтивеЦелл.Оффсет (0, -1)) АцтивеЦелл.ФормулаР1Ц1 = "= Просек (РЦ [-1], РЦ [-2])" АцтивеЦелл.Оффсет (1, 0). Одаберите опсег петље (" А15 "). Изаберите Енд Суб Суб Лооп5 () 'ФОР петља се понавља за фиксну обамрлост времена одређена бројем редова Дим и, ластцелл Ас Лонг 'Проналажење последњег реда који садржи податке у колони А ластцелл = Ранге ("А" & Целлс.Ровс.Цоунт) .Енд (клУп) .Ров Ранге ("Ц15 "). Изабери" и "променљивој је додељена вредност 15 јер наши узорци података почињу од 15. реда" ФОР Лооп вилл лооп к Фор и = 15 То ластцелл АцтивеЦелл.ФормулаР1Ц1 = "= Авераге (РЦ [-1], РЦ [-2 ]) "АцтивеЦелл.Оффсет (1, 0). Одаберите Нект и Ранге (" А15 "). Одаберите Енд Суб Суб Лооп6 ()" Израчунавање просека "Петља Уради ће се петљати све док ћелија у претходној колони активне ћелије не буде празна" Не израчунава просек ако већ постоји нешто у опсегу ћелија ("Г15"). Изаберите Учини ако је празно (АцтивеЦелл) Затим АцтивеЦелл.ФормулаР1Ц1 = "= Просек (РЦ [-1], РЦ [-2])" Енд Иф АцтивеЦелл.Оффсет (1, 0) .Одаберите Лооп унтил ИсЕмпти (АцтивеЦелл.Оффсет (0, -1)) Ранге ("Е15"). Изаберите Енд Суб Суб Лооп7 () 'До До петља ради све док постоји нешто у ћелији у следећој колони „Не израчунава просек ако већ постоји нешто у активном ц елл 'Нити ако у ћелијама нема података који се користе у оквиру просечне функције (да би се избегле грешке #ДИВ/0). 'Израчунавање просечног опсега ("Л15"). Изаберите Уради ако је ИсЕмпти (АцтивеЦелл) Затим Иф ИсЕмпти (АцтивеЦелл.Оффсет (0, -1)) И ИсЕмпти (АцтивеЦелл.Оффсет (0, -2)) Затим АцтивеЦелл.Валуе = " "Елсе АцтивеЦелл.ФормулаР1Ц1 =" = Просек (РЦ [-1], РЦ [-2]) "Енд Иф Енд Иф АцтивеЦелл.Оффсет (1, 0). Одаберите Лооп унтил ИсЕмпти (АцтивеЦелл.Оффсет (0, 1)) Опсег ("Ј15"). Одаберите Енд Суб 

Ако вам се допао овај блог, поделите га са пријатељима на Фацебооку. Такође, можете нас пратити на Твиттер -у и Фацебоок -у.

Волели бисмо да чујемо од вас, јавите нам како можемо побољшати наш рад и учинити га бољим за вас. Пишите нам на веб локацији е -поште