Давраҳо дар VBA

Ҳолатҳое вуҷуд доранд, ки барномаи VBA барои иҷрои як маҷмӯи амалҳо якчанд маротиба дар як саф талаб карда мешавад (яъне як блоки кодро якчанд маротиба такрор кунед). Инро метавон бо истифода аз ҳалқаҳои VBA анҷом дод.

Доираҳои VBA инҳоро дар бар мегиранд:

Минбаъд, мо ба ҳар яке аз ин давраҳо бодиққат назар хоҳем кард.

Барои оператори ҳалқа дар Visual Basic

Сохтори оператори давр Дар дар Visual Basic метавонад дар яке аз ду шакл ташкил карда шавад: ҳамчун ҳалқа Барои… Баъд ё ҳамчун ҳалқа Барои Ҳар.

Давраи «Барои… Баъдӣ»

Давра Барои… Баъд тағирёбандаеро истифода мебарад, ки пайдарпай арзишҳоро аз диапазони додашуда мегирад. Бо ҳар як тағирёбии арзиши тағирёбанда, амалҳои дар бадани давра воридшуда иҷро мешаванд. Инро аз як мисоли оддӣ фаҳмидан осон аст:

Барои ман = 1 Ба 10 Њамагї = Њамагї + iArray(i) Оянда i

Дар ин ҳалқаи оддӣ Барои… Баъд тағйирёбанда истифода мешавад i, ки пайдарпай арзишҳои 1, 2, 3, … 10 -ро мегирад ва барои ҳар яке аз ин арзишҳо, рамзи VBA дар дохили давр иҷро карда мешавад. Ҳамин тариқ, ин давра ҷузъҳои массивро ҷамъбаст мекунад. iArray дар тағйирёбанда Њамагї.

Дар мисоли боло, афзоиши давра муайян карда нашудааст, бинобар ин барои афзоиш додани тағирёбанда i аз 1 то 10, пешфарз як афзоиш аст 1… Аммо, дар баъзе мавридҳо барои ҳалқа арзишҳои гуногуни афзоишро истифода бурдан лозим аст. Инро бо истифода аз калимаи калидӣ анҷом додан мумкин аст қадамичунон ки дар мисоли оддии зерин нишон дода шудааст.

Барои d = 0 То 10 Қадами 0.1 dTotal = dTotal + d Next 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 Next

Изҳороти қатъи даври "Баромад барои"

Оператор Хуруҷ Барои барои боздоштани давра истифода мешавад. Ҳамин ки ин изҳорот дар код вомехӯрад, барнома иҷрои циклро ба итмом мерасонад ва фавран пас аз ин цикл ба иҷрои операторҳое, ки дар код ҳастанд, мегузарад. Инро, масалан, барои ҷустуҷӯи арзиши мушаххас дар массив истифода бурдан мумкин аст. Барои ин бо истифода аз ҳалқа ҳар як элементи массив скан карда мешавад. Ҳамин ки элементи зарурӣ пайдо шуд, боқимондаро аз назар гузаронидан лозим нест - давра қатъ мешавад.

Барномаи оператор Хуруҷ Барои дар мисоли зерин нишон дода шудааст. Дар ин ҷо давра зиёда аз 100 вурудоти массивро такрор мекунад ва ҳар яки онро бо арзиши тағирёбанда муқоиса мекунад дВал… Агар мувофиқат пайдо шавад, пас давра қатъ карда мешавад:

Барои i = 1 то 100 Агар dValues(i) = dVal Пас IndexVal = i Хуруҷ Барои End Агар Оянда бошад i

Давраи Do while дар Visual Basic

Давра Дар ҳоле ки кунед то он даме, ки шарти муқарраршуда иҷро шавад, блоки кодро иҷро мекунад. Дар зер намунаи тартиб дода шудааст Sub, ки дар он давра истифода мешавад Дар ҳоле ки кунед Рақамҳои Фибоначӣ, ки аз 1000 зиёд нестанд, пайдарпай нишон дода мешаванд:

'Зарпроцесс рақамҳои Фибоначиро, ки аз 1000 зиёд нест, мебарорад 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 даври то он даме иҷро мешавад, ки арзиши 'рақами ҷории Фибоначӣ аз 1000 Doexti1000 зиёд бошад Doext1 = Ifi1 0 Пас 'ҳолати махсус барои унсури аввал iStep = 1 iFib = 1 Else 'ҳаҷми афзоиши навбатиро пеш аз баргардонидани 'қимати ҷории пайдарпай захира кунед iStep = iFib iFib = iFib_Next End Агар 'рақами ҷории Фибоначиро дар сутуни A чоп кунед варақаи кории фаъол 'дар сатр бо индекси i Ҳуҷайраҳо(i , 1).Арзиш = iFib 'рақами навбатии Фибоначиро ҳисоб кунед ва индекси мавқеи элементро то XNUMX iFib_Next = iFib + iStep i = i + XNUMX End Loop Increment.

Дар мисоли овардашуда, шарт iFib_Next < 1000 дар ибтидои давра санҷида мешавад. Бинобар ин, агар арзиши аввал iFib_Next Агар зиёда аз 1000 бошад, он гоҳ ҳалқа ҳеҷ гоҳ иҷро намешавад.

Роҳи дигари татбиқи ҳалқа Дар ҳоле ки кунед - шартро на дар аввал, балки дар охири давра гузоред. Дар ин ҳолат, давра ҳадди аққал як маротиба иҷро карда мешавад, новобаста аз он ки шарт иҷро шудааст ё не.

Ба таври схематикй, чунин давра Дар ҳоле ки кунед бо шарте, ки бояд дар охир тафтиш карда шавад, чунин хоҳад буд:

Дохил кунед ... Дар ҳоле ки iFib_Next < 1000 ҳал кунед

Цикл "То то" дар Visual Basic

Давра То то ба давра хеле монанд аст Дар ҳоле ки кунед: блоки код дар бадани давр такрор ба такрор иҷро карда мешавад, то он даме ки шарти муқарраршуда иҷро карда шавад (натиҷаи ифодаи шартӣ дуруст). Дар тартиби оянда Sub бо истифода аз давра То то аз ҳама чашмакҳои сутун арзишҳоро дарёфт кунед A варақаи корӣ то он даме ки сутун бо чашмаки холӣ дучор шавад:

iRow = 1 То IsEmpty (Cells(iRow, 1)) 'Арзиши ячейкаи ҷорӣ дар массиви dCellValues ​​dCellValues(iRow) = Чашмакҳо(iRow, 1) нигоҳ дошта мешавад. Арзиш iRow = iRow + 1 Доирав

Дар мисоли боло, шарт IsEmpty(Чашмакҳо(iRow, 1)) дар ибтидои сохтор ҷойгир аст То то, аз ин рӯ, давра ҳадди аққал як маротиба иҷро карда мешавад, агар чашмаки аввалини гирифташуда холӣ набошад.

Аммо, чунон ки дар мисолхои давра нишон дода шудааст Дар ҳоле ки кунед, дар баъзе ҳолатҳо новобаста аз натиҷаи ибтидоии ифодаи шартӣ, ҳалқа ақаллан як маротиба иҷро карда мешавад. Дар ин ҳолат, ифодаи шартӣ бояд дар охири давра ҷойгир карда шавад, ба монанди:

То ... То холӣ гардед (Чашмакҳо(iRow, 1))

Дин ва мазҳаб