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, содан кейін айнымалы dБарлығы циклдің әрбір қайталануы үшін 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

«Шығу үшін» циклінің үзіліс мәлімдемесі

Оператор Шығу үшін циклді үзу үшін қолданылады. Бұл оператор кодта кездескеннен кейін программа циклды орындауды аяқтайды және осы циклден кейін бірден кодта орналасқан операторларды орындауға көшеді. Мұны, мысалы, массивте белгілі бір мәнді іздеу үшін пайдалануға болады. Ол үшін циклды пайдалана отырып, массивтің әрбір элементі сканерленеді. Қажетті элемент табылғаннан кейін, қалғандарын қараудың қажеті жоқ - цикл үзіледі.

Оператор қолданбасы Шығу үшін келесі мысалда көрсетілген. Мұнда цикл 100-ден астам массив жазбаларын қайталайды және әрқайсысын айнымалының мәнімен салыстырады дВал… Сәйкестік табылса, цикл тоқтатылады:

i үшін = 1-ден 100-ге дейін Егер dМәндер(i) = dVal болса, онда IndexVal = i Шығу Аяқтау Егер келесі болса i

Visual Basic-тегі Do while циклі

Цикл Уақытша жасаңыз көрсетілген шарт орындалғанша код блогын орындайды. Төменде процедураның мысалы келтірілген Sub, онда цикл қолданылады Уақытша жасаңыз 1000-нан аспайтын Фибоначчи сандары ретімен көрсетіледі:

'Қосымша процедура 1000-нан аспайтын Fibonacci сандарын шығарады Sub Fibonacci() Dim i As Integer 'санағы Dim iFib 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_1000N If =1F 1 Содан кейін 'бірінші элемент үшін арнайы жағдай iStep = 0 iFib = 1 Else 'кезектіліктің ағымдағы мәнін қайта жазудан бұрын келесі өсімнің өлшемін сақтаңыз iStep = iFib iFib = iFib_Next End If 'ағымдағы Fibonacci нөмірін A бағанында басып шығарыңыз. белсенді жұмыс парағы 'і Ұяшықтары(i , 1) индексі бар жолда. Value = iFib 'келесі Фибоначчи санын есептеңіз және элемент орнының индексін 1 iFib_Next = iFib + iStep i = i + XNUMX Цикл соңы қосымшасына көбейтіңіз

Берілген мысалда шарт iFib_Next < 1000 циклдің басында тексеріледі. Сондықтан, егер бірінші мән iFib_Next Егер 1000-нан астам болса, цикл ешқашан орындалмас еді.

Циклды жүзеге асырудың тағы бір жолы Уақытша жасаңыз - шартты циклдің басына емес, соңына қойыңыз. Бұл жағдайда шарттың орындалғанына қарамастан, цикл кем дегенде бір рет орындалады.

Схемалық түрде мұндай цикл Уақытша жасаңыз соңында тексерілетін шартпен келесідей болады:

Do ... iFib_Next < 1000 кезінде цикл

Visual Basic жүйесінде «Дайындау» түймесін басыңыз

Цикл дейін орындаңыз циклге өте ұқсас Уақытша жасаңыз: цикл денесіндегі код блогы көрсетілген шарт орындалғанға дейін қайта-қайта орындалады (шартты өрнектің нәтижесі рас). Келесі процедурада Sub циклді пайдалану дейін орындаңыз бағандағы барлық ұяшықтардан мәндерді шығарып алу A жұмыс парағы баған бос ұяшыққа тап болғанша:

iRow = 1 IsEmpty (Ұяшықтар(iRow, 1)) 'Ағымдағы ұяшықтың мәні dCellValues ​​dCellValues(iRow) = Ұяшықтар(iRow, 1) жиымында сақталады. iRow мәні = iRow + 1 цикл

Жоғарыдағы мысалда шарт IsEmpty(Ұяшықтар(iRow, 1)) құрылымның басында орналасады дейін орындаңыз, сондықтан бірінші алынған ұяшық бос болмаса, цикл кем дегенде бір рет орындалады.

Дегенмен, цикл мысалдарында көрсетілгендей Уақытша жасаңыз, кейбір жағдайларда шартты өрнектің бастапқы нәтижесіне қарамастан циклды кем дегенде бір рет орындау қажет. Бұл жағдайда шартты өрнекті циклдің соңына келесідей орналастыру керек:

Орындау ... IsEmpty дейін цикл (Ұяшықтар(iRow, 1))

пікір қалдыру