VBAдагы циклдер

VBA программасы бир эле аракеттерди бир нече жолу катары менен аткарууну талап кылган жагдайлар бар (башкача айтканда, бир эле код блогун бир нече жолу кайталаңыз). Бул VBA циклдерин колдонуу менен жасалышы мүмкүн.

VBA циклдерине төмөнкүлөр кирет:

Андан кийин, биз бул циклдердин ар бирин кылдат карап чыгабыз.

Visual Basicте цикл оператору үчүн

Цикл операторунун структурасы The Visual Basicте эки форманын биринде уюштурулушу мүмкүн: цикл катары Үчүн… Кийинки же цикл катары Ар бирине.

“Үчүн… Кийинки” айлануу

цикл Үчүн… Кийинки берилген диапазондогу маанилерди ырааттуу түрдө алган өзгөрмө колдонот. Өзгөрмөнүн маанисинин ар бир өзгөрүшү менен циклдин денесинде камтылган иш-аракеттер аткарылат. Муну жөнөкөй мисалдан түшүнүү оңой:

i үчүн = 1ден 10го чейин Бардыгы = Бардыгы + iArray(i) Кийинки i

Бул жөнөкөй циклде Үчүн… Кийинки өзгөрмө колдонулат i, ал ырааттуу түрдө 1, 2, 3, … 10 маанилерин алат жана бул маанилердин ар бири үчүн циклдин ичиндеги VBA коду аткарылат. Ошентип, бул цикл массивдин элементтерин бириктирет. iArray өзгөрмөлүү Бардыгы болуп.

Жогорудагы мисалда циклдин өсүүсү көрсөтүлгөн эмес, ошондуктан өзгөрмөнү көбөйтүү үчүн i 1ден 10го чейин, демейки өсүү болуп саналат 1... Бирок, кээ бир учурларда цикл үчүн ар кандай кошумча маанилерди колдонуу керек. Бул ачкыч сөздү колдонуу менен жасалышы мүмкүн кадамтөмөнкү жөнөкөй мисалда көрсөтүлгөндөй.

d = 0 үчүн 10 кадам 0.1 dTotal = dTotal + d Кийинки d

Жогорудагы мисалда өсүү кадамы барабар коюлган 0.1, андан кийин өзгөрмө dTotal циклдин ар бир кайталанышы үчүн 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 маанилерин алат.

VBAдагы цикл кадамын аныктоо үчүн, сиз терс маанини колдонсоңуз болот, мисалы:

i = 10 үчүн 1 кадам -1 iArray(i) = i Кийинки i

Бул жерде өсүш болуп саналат -1, ошондуктан өзгөрмө i циклдин ар бир кайталанышы менен 10, 9, 8, … 1 маанилерин алат.

"Ар бири үчүн" цикли

цикл Ар бирине циклге окшош Үчүн… Кийинки, бирок эсептегич өзгөрмө үчүн маанилердин ырааттуулугун кайталоонун ордуна, цикл Ар бирине объекттердин көрсөтүлгөн тобундагы ар бир объект үчүн аракеттердин комплексин аткарат. Төмөнкү мисалда циклди колдонуу Ар бирине учурдагы Excel иш китебиндеги бардык барактарды санайт:

WSheet'ти Жумуш барактарындагы ар бир wSheet үчүн иш барагы катары караңгылатуу MsgBox "Найден тизмеси: " & wSheet.Name Кийинки wSheet

"Чыгуу үчүн" циклин үзгүлтүккө учуратуучу билдирүү

Оператор ExitFor циклди үзүү үчүн колдонулат. Бул оператор коддо жолуккан замат, программа циклдин аткарылышын аяктайт жана ушул циклден кийин дароо коддогу операторлордун аткарылышына өтөт. Муну, мисалы, массивдеги белгилүү бир маанини издөө үчүн колдонсо болот. Бул үчүн, циклди колдонуп, массивдин ар бир элементи сканерден өткөрүлөт. Керектүү элемент табылганда, калганын карап чыгуунун кереги жок - цикл үзгүлтүккө учурайт.

Оператордун колдонмосу ExitFor төмөнкү мисалда көрсөтүлгөн. Бул жерде цикл 100 массив жазуусун кайталайт жана ар бирин өзгөрмөнүн мааниси менен салыштырат dVal... Эгерде дал келүү табылса, цикл токтотулат:

i үчүн = 1ден 100гө чейин Эгерде dValues(i) = dVal Анда IndexVal = i Чыгыңыз Аягына чыксаңыз, Кийинки i

Visual Basic программасында Do while цикли

цикл Убактылуу кыл көрсөтүлгөн шарт аткарылса, код блогун аткарат. Төмөндө процедуранын мисалы келтирилген Sub, анда циклди колдонуу Убактылуу кыл 1000ден ашпаган Fibonacci сандары ырааттуу түрдө көрсөтүлөт:

'Субдика процедурасы 1000ден ашпаган Fibonacci сандарын чыгарат Sub Fibonacci() Dim i As Integer 'санагы ырааттуулуктагы элементтин абалын көрсөтүү үчүн Dim iFib As Integer 'ырааттуулуктун учурдагы маанисин сактайт Dim iFib_Next As Integer кийинки маанини сактайт ырааттуулугу Dim iStep As Integer "кийинки өсүштүн өлчөмүн сактайт" i жана iFib_Next өзгөрмөлөрүн инициализациялайт i = 1 iFib_Next = 0 'Do While цикли 'учурдагы Fibonacci саны 1000ден чоңураак болгонго чейин аткарылат Doext 1000 Doext_1 If1F = If0F 1 Андан кийин 'биринчи элемент үчүн өзгөчө жагдай iStep = 1 iFib = 1 Else 'катарлыктын учурдагы маанисин кайра жазуудан мурун кийинки өсүштүн өлчөмүн сактаңыз iStep = iFib iFib = iFib_Next End If 'азыркы Фибоначчи санын A тилкесинде басып чыгарыңыз. жигердүү иш барагы 'индекс менен катарда i Cells(i , XNUMX).Value = iFib 'кийинки Fibonacci санын эсептеп, элементтин абалынын индексин XNUMXге көбөйтүңүз iFib_Next = iFib + iStep i = i + XNUMX Loop End Sub

Берилген мисалда шарт iFib_Next < 1000 циклдин башында текшерилет. Ошондуктан, эгерде биринчи баалуулук iFib_Next Эгерде 1000ден ашык болсо, анда цикл эч качан аткарылбайт.

Укукту ишке ашыруунун дагы бир жолу Убактылуу кыл - шартты циклдин башына эмес, аягына кой. Бул учурда, цикл, шарттын аткарылганына карабастан, жок дегенде бир жолу аткарылат.

Схемалык түрдө мындай цикл Убактылуу кыл аягында текшериле турган шарт менен мындай болот:

Do ... Loop while iFib_Next < 1000

Visual Basic'те "До чейин" деген цикл

цикл чейин циклге абдан окшош Убактылуу кыл: циклдин денесиндеги код блогу көрсөтүлгөн шарт аткарылмайынча кайра-кайра аткарылат (шарттуу туюнтуунун натыйжасы чыныгы). Кийинки процедурада Sub циклди колдонуу чейин мамычанын бардык уячаларынан баалуулуктарды алуу A колонна бош уячага туш болмоюнча иш барагында:

iRow = 1 IsEmpty (Cells(iRow, 1)) 'Учурдагы уячанын мааниси dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) массивинде сакталат. iRow мааниси = iRow + 1 цикл

Жогорудагы мисалда шарт IsEmpty(Клеткалар(iRow, 1)) структурасынын башында жайгашкан чейин, ошондуктан биринчи алынган уяча бош болбосо, цикл жок дегенде бир жолу аткарылат.

Бирок, цикл мисалдарында көрсөтүлгөндөй Убактылуу кыл, кээ бир кырдаалдарда шарттуу туюнтумдун баштапкы натыйжасына карабастан цикл жок дегенде бир жолу аткарылышы керек. Бул учурда, шарттуу туюнтма циклдин аягында жайгаштырылышы керек, мисалы:

Do ... IsEmpty чейин цикл (Клеткалар(iRow, 1))

Таштап Жооп