VBA-dagi tsikllar

VBA dasturi bir xil harakatlar to'plamini ketma-ket bir necha marta bajarishi kerak bo'lgan holatlar mavjud (ya'ni, bir xil kod blokini bir necha marta takrorlang). Buni VBA looplari yordamida amalga oshirish mumkin.

VBA tsikllari quyidagilarni o'z ichiga oladi:

Keyinchalik, biz ushbu tsikllarning har birini batafsil ko'rib chiqamiz.

Visual Basic-da Loop operatori uchun

Loop operatorining tuzilishi The Visual Basic da ikkita shakldan birida tashkil etilishi mumkin: tsikl sifatida Uchun… Keyingi yoki halqa sifatida Har biriga.

"Keyingi ... uchun" tsikli

Ko'chadan Uchun… Keyingi ma'lum diapazondan qiymatlarni ketma-ket qabul qiladigan o'zgaruvchidan foydalanadi. O'zgaruvchining qiymatining har bir o'zgarishi bilan tsiklning tanasiga kiritilgan harakatlar amalga oshiriladi. Buni oddiy misoldan tushunish oson:

i uchun = 1 dan 10 gacha Jami = Jami + iArray(i) Keyingi i

Ushbu oddiy tsiklda Uchun… Keyingi o'zgaruvchi ishlatiladi i, u ketma-ket 1, 2, 3, … 10 qiymatlarini oladi va bu qiymatlarning har biri uchun tsikl ichidagi VBA kodi bajariladi. Shunday qilib, bu sikl massiv elementlarini jamlaydi. iArray o'zgaruvchida jami.

Yuqoridagi misolda, o'zgaruvchini oshirish uchun tsikl o'sishi ko'rsatilmagan i 1 dan 10 gacha, standart o'sish hisoblanadi 1… Biroq, ba'zi hollarda tsikl uchun turli xil o'sish qiymatlaridan foydalanish kerak bo'ladi. Buni kalit so'z yordamida amalga oshirish mumkin qadamquyidagi oddiy misolda ko'rsatilganidek.

d = 0 dan 10 gacha qadam uchun 0.1 dJami = dJami + d Keyingi d

Yuqoridagi misolda o'sish bosqichi teng o'rnatilganligi sababli 0.1, keyin o'zgaruvchi dJami tsiklning har bir takrorlanishi uchun 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 qiymatlarini oladi.

VBA-da aylanish bosqichini aniqlash uchun siz salbiy qiymatdan foydalanishingiz mumkin, masalan, quyidagi kabi:

i uchun = 10 dan 1-qadam -1 iArray(i) = i Keyingi i

Mana o'sish -1, shuning uchun o'zgaruvchi i tsiklning har bir takrorlanishi bilan 10, 9, 8, … 1 qiymatlarini oladi.

"Har bir uchun" tsikli

Ko'chadan Har biriga tsiklga o'xshaydi Uchun… Keyingi, lekin hisoblagich o'zgaruvchisi uchun qiymatlar ketma-ketligini takrorlash o'rniga, tsikl Har biriga belgilangan ob'ektlar guruhidagi har bir ob'ekt uchun harakatlar to'plamini bajaradi. Quyidagi misolda loop yordamida Har biriga joriy Excel ish kitobidagi barcha varaqlarni sanab o'tadi:

Ishchi varaqlardagi har bir wSheet uchun ish varag'i sifatida xiralashtirish MsgBox "Nayden list: " & wSheet.Name Keyingi wSheet

"Chiqish uchun" tsiklini uzish bayonoti

Operator Chiqish uchun tsiklni to'xtatish uchun ishlatiladi. Kodda bu bayonot uchragan zahoti dastur sikl bajarilishini tugatadi va shu sikldan keyin darhol koddagi operatorlarni bajarishga o'tadi. Bu, masalan, massivda ma'lum bir qiymatni qidirish uchun ishlatilishi mumkin. Buning uchun sikl yordamida massivning har bir elementi skanerlanadi. Kerakli element topilgandan so'ng, qolgan qismini ko'rib chiqishning hojati yo'q - tsikl to'xtatiladi.

Operator dasturi Chiqish uchun quyidagi misolda ko'rsatilgan. Bu erda tsikl 100 dan ortiq massiv yozuvlarini takrorlaydi va har birini o'zgaruvchining qiymati bilan taqqoslaydi. dVal… Agar moslik topilsa, tsikl tugatiladi:

i uchun = 1 dan 100 gacha Agar dValues(i) = dVal bo'lsa IndexVal = i Chiqish oxirigacha Agar keyingi bo'lsa i

Visual Basic-da Do while tsikli

Ko'chadan Vaqti-vaqti bilan qiling belgilangan shart bajarilganda kod blokini bajaradi. Quyida protseduraga misol keltirilgan sub, unda pastadir yordamida Vaqti-vaqti bilan qiling 1000 dan oshmaydigan Fibonachchi raqamlari ketma-ket ko'rsatiladi:

'Sub protsedura 1000 dan oshmaydigan Fibonachchi raqamlarini chiqaradi Sub Fibonacci() Dim i As Integer 'hisoblagichi elementning ketma-ketlikdagi o'rnini ko'rsatadi Dim iFib As Integer 'ketmasining joriy qiymatini saqlaydi Dim iFib_Next As Integer 'keyingi qiymatni saqlaydi ketma-ketligi Dim iStep As Integer 'keyingi o'sish hajmini saqlaydi' o'zgaruvchilar i va iFib_Next i = 1 iFib_Next = 0 'Do While sikli joriy Fibonachchi raqami qiymati 1000 dan katta bo'lgunga qadar bajariladi Doext = If1000F = If1F 1 Keyin 'birinchi element uchun maxsus holat iStep = 0 iFib = 1 Aks holda 'ketma-ketlikning joriy qiymatini qayta yozishdan oldin keyingi o'sish hajmini saqlang iStep = iFib iFib = iFib_Next End Agar 'joriy Fibonachchi raqamini A ustunida chop eting. faol ish varag'i 'indeksli qatorda i Hujayralar(i , 1).Value = iFib 'keyingi Fibonachchi raqamini hisoblang va element pozitsiyasi indeksini 1 ga oshiring iFib_Next = iFib + iStep i = i + XNUMX Loop End Sub

Berilgan misolda shart iFib_Next < 1000 tsiklning boshida tekshiriladi. Shuning uchun, agar birinchi qiymat bo'lsa iFib_Keyingi Agar 1000 dan ortiq bo'lsa, tsikl hech qachon bajarilmaydi.

Loopni amalga oshirishning yana bir usuli Vaqti-vaqti bilan qiling - shartni halqaning boshiga emas, oxiriga qo'ying. Bunday holda, shart bajarilganligidan qat'i nazar, tsikl kamida bir marta bajariladi.

Sxematik tarzda, bunday tsikl Vaqti-vaqti bilan qiling oxirida tekshiriladigan shart bilan quyidagicha ko'rinadi:

Do ... iFib_Next < 1000 bo‘lganda loop

Visual Basic-da "To Until" tugmasi

Ko'chadan Ungacha qiling tsiklga juda o'xshaydi Vaqti-vaqti bilan qiling: sikl tanasidagi kod bloki belgilangan shart bajarilgunga qadar qayta-qayta bajariladi (shartli ifoda natijasi chin). Keyingi protsedurada sub tsikldan foydalanish Ungacha qiling ustundagi barcha kataklardan qiymatlarni olish A ustun bo'sh katakka duch kelmaguncha ish varag'i:

iRow = 1 To IsEmpty(Cells(iRow, 1)) 'Joriy katakning qiymati dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) massivida saqlanadi. iRow qiymati = iRow + 1 Loop

Yuqoridagi misolda shart IsEmpty(Hujayralar(iRow, 1)) strukturaning boshida joylashgan Ungacha qiling, shuning uchun birinchi olingan katak bo'sh bo'lmasa, tsikl kamida bir marta bajariladi.

Biroq, loop misollarida ko'rsatilganidek Vaqti-vaqti bilan qiling, ba'zi holatlarda shartli ifodaning dastlabki natijasidan qat'i nazar, tsikl kamida bir marta bajarilishi kerak. Bunday holda, shartli ifoda tsiklning oxiriga joylashtirilishi kerak, masalan:

Amal qiling ... Bo'sh bo'lgunga qadar aylanish (Hujayralar(iRow, 1))

Leave a Reply