Оператори циклу в vba. Цикли VBA. Оператори Continue та Exit

28.03.2020 Новини

Алгоритм циклу For….Next наведено на рис. 5.28.

Counter – будь-яка чисельна змінна VBA, зазвичай змінна типу Integer чи Long.

Start - будь-яке чисельне вираз та визначає початкове значеннядля змінної Counter.

End - Чисельний вираз, що визначає кінцеве значення для змінної Counter .

Statements - Один, кілька або жодного оператора. Ці оператори виконують тіло циклу. VBA виконує кожен із цих операторів при кожному виконанні циклу.

Ключове слово Next

Counter=counter+StepSise

9.28. Алгоритм циклу For…

Ключове слово Next повідомляє VBA про те, що досягнуто кінець циклу. Не обов'язкова змінна Counter після ключового слова Next повинна бути тією ж змінною Counter, яка була задана після ключового слова Для початку структури циклу.

Синтаксис:

For counter = Start To End

При виконанні циклуForNext VBAнадходить так:

Надає значення, представлене Star , змінної З ounter .

Виконує всі оператори, представлені за допомогою Statements , доки не досягне ключового слова Next . Ключове слово Next показує VBA те що, що досягнуто кінець тіла циклу.

Змінює змінну З ounter на величину StepSize (якщо включається необов'язкове слово Step) Якщо Step не визначено, VBA збільшує змінну counter на 1.

Повертається до початку циклу та порівнює поточне значення змінної З ounter із значенням, представленим End. Якщо значення З ounter менше значення End , VBA продовжує виконання з першого оператора після ключового слова Next .

9.2.4. Введення-виведення одновимірних та двовимірних масивів

Масив (array) – це колекція змінних, які мають спільне ім'я та базовий тип. Масив є зручним способом зберігання декількох пов'язаних елементів даних в єдиному контейнері для більшої зручності та ефективності програмування. Всі елементи даних, що зберігаються в масиві, повинні мати той самий тип.

Масив дозволяє зберігати та маніпулювати багатьма елементами даних за допомогою єдиної змінної. Крім зменшення загальної кількості різних імен змінних, які необхідно відстежувати, іншою основною перевагою використання масивів є те, що можна використовувати цикли для легкої обробки різних елементів масивів. Поєднуючи масиви та структури циклу (зазвичай For….Next) можна написати невелику кількість операторів, які обробляють великий обсяг даних. Виконання тих самих завдань із використанням окремих змінних може вимагати написання сотень операторів.

Розмірність масиву

У мовах програмування зазвичай використовуються одновимірні та багатовимірні масиви, одні з яких описують відносно прості, інші складніші об'єкти.

Одновимірні масиви

Приклад одновимірного масиву наведено у таблиці № 9.9.

Таблиця №9.9

У програмуванні зазвичай використовується нумерація з нульовою базою.

Для доступу до даних, що зберігаються в певному елементі масиву, слід вказувати ім'я масиву з наступним числом, яке називається індексом елемента. Індекс укладають у круглі дужки. Наприклад, якщо масив у таблиці № 1.1 має ім'я DoubleArray, наступний оператор присвоює число 45 змінної DoubleAny.

DoubleAny = DoubleArray (3)

У цьому операторі число 3 є індекс масиву. Оскільки нумерація елементів починається з нуля, елемент, на який посилається оператор, є фактично четвертим елементом масиву DoubleArray.

При виконанні оператора DoubleArray VBA вибирає значення 45 і зберігає це значення в змінній DoubleArray.

Цей же оператор можна використовувати при збереженні даних у масиві:

DoubleArray (5)=12.

При виконанні цього оператора VBA поміщає значення 12 в зазначений елемент масиву, замінюючи попередній вміст цього елемента.

Одновимірні масиви зазвичай використовуються для представлення різних списків даних.

Багатовимірні масиви

Коли необхідно подати таблиці даних з організацією даних у форматі рядків та стовпців, для цього використовують багатовимірні масиви.

У двовимірному масиві адреса кожного осередку складається з двох чисел: номер рядка (перший індекс) та номер стовпця (другий індекс). У VBA можна створювати масиви до 60 вимірів.

Якщо масиві число елементів не змінюється, такий масив називається статичним.

Статичні та динамічні масиви

Якщо під час виконання VBA-програми можна змінювати кількість елементів у масиві, такі масиви називаються динамічними. Для зміни розміру динамічного масиву використовується оператор ReDim.

VBA зберігає зарезервовану область пам'яті для всіх елементів у масиві, доки існує змінна типу масиву. Подібні масиви називаються статичними (static), тому що кількість елементів у масиві не змінюється.

ОператорOption Base

Зазвичай VBA використовуються масиви з нульовою базою. Оператор Option Base дозволяє задавати 0 або 1 як початкове число за промовчанням для індексів масиву. Якщо оператор Option Base не використовується, VBA починає нумерацію індексів з 0 (за умовчанням). Перед оголошенням будь-яких змінних, констант або процедур необхідно помістити оператор Option Base в область оголошень модуля. Не можна розміщувати оператор Option Base всередині процедури. Можна мати лише один оператор Option Base у модулі.

Синтаксис:

Option Base 0|1

Оголошення масивів

Оголошення масиву за допомогою оператора Dimмає наступний синтаксис.

Синтаксис:

Dim VarName ()

Dim VarName (upper, upper]….)[ As type],

VarName – будь-яке ім'я для масиву, що відповідає VBA-правилам для імен ідентифікаторам.

Subscripts – вимір масиву.

As Type - тип даних.

Lower – нижня межа значення індексу.

Upper – верхня межа значення індексу.

Type – тип даних

Якщо опустити тип, всі елементи масиву матимуть тип Variant. VBA ініціалізує елементи числових масивів нулями та елементи рядкових масивів порожніми рядками.

Dim str_array (1 To 100) As String

Dim variant_array ()

Dim str_Multiplication (0 To 15, 0 To 15) As String

Використання масивів

Для доступу до елемента масиву необхідно вказати ім'я масиву, за яким слідує значення індексу, укладене у круглі дужки.

Звернення до елемента масиву має наступний синтаксис.

Синтаксису.

arrayName (validIndex1, ….)

validIndex – ім'я масиву.

validIndex1 – допустиме значення індексу першого вимірювання масиву.

validIndex2 – допустиме значення індексу другого вимірювання масиву.

Необхідно надавати значення індексу для кожного вимірювання масиву при кожному зверненні до елемента масиву.

Введення-виведення одновимірних масивів

При введенні одновимірного масиву необхідно послідовно вводити 1-й, 2-й і т.д. елементи масиву, аналогічно надходять під час виведення. Для введення чи виведення масиву необхідно організувати цикл. Найбільш зручно використовувати для введення та виведення одновимірного масиву алгоритм з використанням безумовного циклу.

Алгоритм введення виведення одновимірного масиву наведено на рис.5.29.

Розшифрування процедури наведено нижче.

Sub Massiv () – назва процедури.

Dim Mas (5) As Integer - оголосили одновимірний масив із 5-ма елементами, тип чисел – цілі.

Dim s As String – оголосили робочу змінну для завершального виведення даних із масиву у діалоговому вікні. As String – тип даних у змінній для зберігання.

For i = 1 To 5 – процедура у першому циклі For….Next, приймає цілі числа від 1 до 5 і заносить в масив.

Mas(i) = InputBox(i) – введення цілого числа для i-го елемента.

Next – перехід до другого циклу (елементи масиву заносяться в рядок та виводяться на екран у діалоговому вікні за допомогою оператора MsgBox).

For i = 1 To 5 – елементи у рядку з 1 до 5.

s = s & Mas(i) & ";" - Формування рядка з елементів масиву. Масив виводиться в один рядок. Елементи масиву поділяються символом ";".

MsgBox s – виведення раніше введеного масиву.

Рис.5.27. Алгоритм введення-виводу одновимірного

Мал. 9.29. Алгоритм та процедура введення-виведення одновимірного масиву

Введення-виведення двовимірного масиву

Алгоритм та процедура введення та виведення двовимірного масиву представлений на рис.5.30.

Опис цієї процедури:

Sub Massiv () – назва процедури

Оголошення змінних, що використовуються у цій процедурі:

Dim Mas (5, 5) As Integer - оголосили двомірний масив з 5 стовпцями та п'ятьма рядками, тип чисел – цілі.

Dim s As String – оголосили робочу змінну для завершального виведення даних із масиву у діалоговому вікні. As String – тип даних у змінній для зберігання

Next i - закінчення операції присвоєння змінних

Введення елементів масиву на згадку про комп'ютер:

For i = 1 To 5 – введення здійснюється з першого елемента першого рядка, потім другого і т.д.

For j = 1 To 5 до кінця першого рядка, потім з першого елемента другого рядка і т.д.

Mas(i,j) = InputBox(i,j) – оператор введення елементів масиву на згадку про ЕОМ

Мал. 9.30. Алгоритм та процедура введення-виведення двовимірного масиву

Алгоритми впорядкування масиву

Як приклад наведемо алгоритм та процедуру сортування одномірного масиву методом «бульбашка»

Виведення елементів введеного масиву з пам'яті ЕОМ:

For i = 1 To 5 – висновок здійснюється аналогічно до введення

s = s & Mas (i,j) & “; ”

s = s & Chr (13) – переклад рядка (виведення не одним рядком, а кількома, як у введеному масиві)

Next i – закінчення дії оператора For…

MsgBox s – виведення раніше введеного масиву на діалогове вікно

End Sub – закінчення процедури.

Цикли дозволяють виконати один або кілька рядків коду кілька разів. VBA підтримує такі цикли:

For...Next For Each...Next Do... Loop

Конструкція For. . . Next. Коли число повторень відоме заздалегідь, використовують цикл For . . . Next. У циклі For використовується змінна, яка називається змінною циклу або лічильником циклу, яка збільшується або зменшується на задану величину при кожному повторенні циклу. Синтаксис цієї конструкції наступний:

For counter = start To end оператори Next

Параметри counter (лічильник), start (початок циклу), end (кінець циклу) та increment (приріст) є числовими.

Примітка. Параметр increment може бути як позитивним, і негативним. Якщо він позитивний, параметр start повинен бути меншим або дорівнює параметру end, інакше цикл не виконуватиметься. Якщо параметр increment негативний, то параметр start має бути більшим або дорівнює значенню параметра end, щоб виконувалося тіло циклу. Якщо параметр Step не заданий, значення параметра increment за замовчуванням дорівнює 1.

VBA виконує цикл For у наступній послідовності:

1. Встановлює значення змінної циклу counter значення start.

2. Порівнює значення змінної циклу counter та значення параметра end. Якщо змінна counter більша, VBA завершує виконання циклу. (Якщо значення параметра increment негативно, то VBA припиняє виконання циклу за умови, що значення змінної циклу counter менше значення параметра end.)

3. Виконує оператори тіла циклу statements.

4. Збільшує значення змінної циклу counter на 1 або величину значення параметра increment, якщо він заданий.

5. Повторює кроки з 2 до 4.

Розглянемо приклад: Обчислити значення функції f(t)

при заданих a, b, n, якщо t змінюється від a до b з кроком Dt=(b-a)/(n-1).

Sub приклад3() Dim f() As Single Dim As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1" , b) : Call read("c1", n) ReDim f(1 To n - 1) dt = (b - a) / (n - 1) : t = a Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") For i = 1 To n - 1 t = t + dt If t<= -1 Then f(i) = -1 ElseIf t >1 Then f(i) = 1 Else f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Call out("c" & (2 + i), f(i)) Next i End Sub

Конструкція For Each. . . Next

Цикл For Each. . . Next схожий на цикл For. . . Next, але він повторює групу операторів кожного елемента з набору об'єктів чи з масиву, замість повторення операторів задане число раз. Він особливо корисний, коли невідомо скільки елементів міститься в наборі.

Синтаксис конструкції циклу For Each. . . Next такий:

For Each element In group оператори Next element

Слід пам'ятати такі обмеження при використанні циклу For Each. . . Next:

Для наборів параметр element може бути лише змінної типу variant, загальної змінної типу object або об'єктом, перерахованим у Object Browser

Для масивів параметр element може бути лише змінною типу Variant

Не можна використовувати цикл For Each. . . Next з масивом, що має певний користувачем тип, оскільки змінна типу variant не може містити значення певного користувачем типу

Конструкція Do...Loop

Цикл Do застосовується для виконання блоку операторів необмежену кількість разів. Існує кілька різновидів конструкції Do. . . Loop, але кожна з них обчислює вираз-умову, щоб визначити момент виходу з циклу. Як і у випадку конструкції If. . . Ця умова повинна бути величиною або виразом, що приймають значення False (нуль) або True (не нуль).

У наступній конструкції Do. . . Loop оператори виконуються доти, доки значенням умови є True (Істина):

Do While умова оператори Loop

Виконуючи цей цикл, VBA спочатку перевіряє умову. Якщо умова помилкова (False), він пропускає всі оператори циклу. Якщо воно є істинним (True), VBA виконує оператори циклу, знову повертається до оператора Do While і знову перевіряє умову.

Отже, цикл, представлений цією конструкцією, може виконуватися будь-яке число разів, поки значенням умови є не нуль або True (Істина). Зазначимо, що оператори тіла циклу не виконуються жодного разу, якщо за першої перевірки умови воно виявляється помилковим (False).

Розглянемо приклад: Обчислити суму ряду

із заданою точністю.

Sub приклад4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x) : Call read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Do While Abs(m) >= e p = -p * x m = p / is = s + m Call out("a" & (2 + i), i): Call out("b" & (2 + i), Abs (m)) : Call out("c" & (2 + i), s) i = i + 1 Loop End Sub

Інший різновид конструкції Do. . . Loop спочатку виконує оператори тіла циклу, а потім перевіряє умову після кожного виконання. Цей різновид гарантує, що оператори тіла циклу виконуються принаймні один раз:

Do оператори Loop While умова

Два інші різновиди конструкції циклу аналогічні попереднім, за винятком того, що цикл виконується, поки умова помилкова (False):

Цикл не виконується взагалі або виконується багато разів:

Do Until умова

оператори Loop

Цикл виконується принаймні один раз:

оператори

Loop Until умова

7.2 Вкладені цикли.

Можна поміщати структури управління всередину інших структур управління (наприклад, блок If . . . Then всередину циклу For . . . Next). Говорять, що структура управління, вміщена всередину іншої структури управління, є вкладеною.

Глибина вкладення керуючих структур VBA не обмежена. Для поліпшення читання коду прийнято практику зміщення тіла конструкції прийняття рішення або циклу в програмі у разі використання вкладених структур управління.

При вкладенні в цикл одного або кілька інших циклів говорять про вкладені цикли, в яких розрізняють зовнішні (що охоплюють) і внутрішні (вкладені) цикли.

Розглянемо приклад підсумовування елементів Aij матриці A(n,m) рядково.

Sub приклад5() Dim a() As Single, s() As Single Dim n As Integer, m As Integer Dim i As Integer, j As Integer Call read("a1", n): Call read("b1", m ) ReDim a(1 To n, 1 To m), s(1 To n) "Читання матриці For i = 1 To n For j = 1 To m Call readcell(i + 1, j, a(i, j)) Next j Next i "Обчислення For i = 1 To n s (i) = 0 For j = 1 To m s (i) = s (i) + a (i, j) Next j Call outcell (i + 1, m + 1 , s(i)) Next i End Sub

Зауважимо, перший оператор Next закриває внутрішній цикл For, а останній оператор Next закриває зовнішній цикл For. Так само і для вкладених операторів If, оператори End If автоматично застосовуються для закриття найближчого до нього оператора If. Вкладені структури Do. . . Loop працюють так само: найдальший оператор Loop відповідає найдальшому оператору Do.

Під час введення/виведення елементів двовимірного масивуна робочий лист Microsoft Excelзручно застосовувати користувацькі процедури введення/виводу:

Sub readcell(i As Integer, j As Integer, val As Variant) val = Аркуш1.Cells(i, j). j).Value = val End Sub

де I – номер рядка, j – номер стовпця робочого листа.

Вихід із структур управління

Оператор Exit дозволяє виходити безпосередньо з циклу For, циклу Do, процедури Sub чи процедури Function. Синтаксис оператора Exit простий:

For counter = start To end [блок операторів] [блок операторів] Next Do [(While | Until) умова] [блок операторів] [блок операторів] Loop

Exit Forвсередині циклу For і Exit Do всередині циклу Do можуть з'явитися скільки завгодно разів.

Оператор Exit Do працює з усіма різновидами синтаксису циклу Do.

Оператори Exit For та Exit Do застосовуються, якщо необхідно завершити цикл негайно, не продовжуючи подальших ітерацій або не чекаючи виконання блоку операторів у тілі циклу.

При використанні оператора Exit для виходу з циклу значення змінної циклу залежать від того, як завершується виконання циклу:

При нормальному завершенні циклу значення змінної циклу має на одиницю більше за верхню межу числа циклів

При передчасному завершенні циклу змінна циклу зберігає своє значення, яке вона набула з урахуванням звичайних правил

При завершенні циклу до кінця набору змінна циклу має значення Nothing (Нічого), якщо вона є змінною типу object (Об'єкт), або значення Empty (Пусто), якщо вона є змінною типу Variant

Зустрічаються ситуації, коли від програми VBA потрібно зробити кілька разів поспіль той самий набір дій (тобто повторити кілька разів один і той самий блок коду). Це можна зробити з допомогою циклів VBA.

Оператор циклу "For" у Visual Basic

Структура оператора циклу Forв Visual Basicможе бути організована в одній із двох форм: як цикл For … Nextабо як цикл For Each.

Цикл "For ... Next"

Цикл For … Nextвикористовує змінну, яка послідовно набуває значення із заданого діапазону. З кожною зміною значення змінної виконуються дії, які у тілі циклу. Це легко зрозуміти з простого прикладу:

For i = 1 To 10 Total = Total + iArray(i) Next i

У цьому простому циклі For … Nextвикористовується змінна i, яка послідовно набуває значення 1, 2, 3, … 10, і для кожного з цих значень виконується код VBA, що знаходиться всередині циклу. Таким чином, даний цикл підсумовує елементи масиву iArrayу змінній Total.

У наведеному вище прикладі крок збільшення циклу не вказаний, тому для покрокового збільшення змінної iвід 1 до 10 за замовчуванням використовується збільшення 1 . Однак, у деяких випадках потрібно використовувати інші значення збільшення циклу. Це можна зробити за допомогою ключового слова Step, як показано в наступному прикладі.

For d = 0 To 10 Step 0.1 dTotal = dTotal + d Next d

Так як у наведеному вище прикладі заданий крок збільшення рівний 0.1 , то змінна dTotalдля кожного повторення циклу набуває значення 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

Для визначення кроку циклу VBA можна використовувати негативну величину, наприклад, ось так:

For i = 10 To 1 Step -1 iArray(i) = i Next i

Тут крок збільшення дорівнює -1 тому змінна iз кожним повторенням циклу набуває значення 10, 9, 8, … 1.

Цикл "For Each"

Цикл For Eachсхожий на цикл For … Next, але замість того, щоб перебирати послідовність значень для змінної-лічильника, цикл For Eachвиконує набір дій для кожного об'єкта із зазначеної групи об'єктів. У наступному прикладі за допомогою циклу For Eachвиконується перерахування всіх листів у поточній робочої книги Excel:

Dim wSheet As Worksheet For Each wSheet in Worksheets MsgBox "Знайдено аркуш: " & wSheet.Name Next wSheet

Оператор переривання циклу "Exit For"

Оператор Exit Forзастосовується для переривання циклу. Як тільки код зустрічається цей оператор, програма завершує виконання циклу і переходить до виконання операторів, що у коді відразу після цього циклу. Це можна використовувати, наприклад, для пошуку певного значення масиву. Для цього за допомогою циклу проглядається кожен елемент масиву. Як тільки знайдений елемент, переглядати інші немає необхідності - цикл переривається.

Застосування оператора Exit Forпоказано в наступному прикладі. Тут цикл перебирає 100 записів масиву та порівнює кожну зі значенням змінної dVal. Якщо збіг знайдено, цикл переривається:

For i = 1 To 100 If dValues(i) = dVal The IndexVal = i Exit For End If Next i

Цикл "Do While" у Visual Basic

Цикл Do Whileвиконує блок коду доти, доки виконується задана умова. Далі наведено приклад процедури Sub, в якій за допомогою циклу Do Whileвиводяться послідовно числа Фібоначчі, що не перевищують 1000:

"Процедура Sub виводить числа Фібоначчі, що не перевищують 1000 Sub Fibonacci() Dim i As Integer "лічильник для позначення позиції елемента в послідовності Dim iFib As Integer "зберігає поточне значення послідовності Dim iFib_Next As Integer "зберігає наступне значення послідовності Dim розмір наступного збільшення "ініціалізуємо змінні i і iFib_Next i = 1 iFib_Next = 0" цикл Do While буде виконуватися до тих пір, поки значення "поточного числа Фібоначчі не перевищить 1000 Do While iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

У наведеному прикладі умова iFib_Next< 1000 перевіряється на початку циклу. Тому якби перше значення iFib_Nextбуло б більше 1000, то цикл не виконувався б жодного разу.

Інший спосіб реалізувати цикл Do While- Помістити умову не на початку, а в кінці циклу. У цьому випадку цикл буде виконаний хоча б раз, незалежно від того, чи виконується умова.

Схематично такий цикл Do Whileз умовою, що перевіряється, в кінці виглядатиме ось так:

Do ... Loop While iFib_Next< 1000

Цикл "Do Until" у Visual Basic

Цикл Do Untilдуже схожий на цикл Do While: блок коду в тілі циклу виконується щоразу до тих пір, поки задана умова виконується (результат умовного виразу дорівнює True). У наступній процедурі Subза допомогою циклу Do Untilвитягуються значення з усіх осередків стовпця Aробочого листа до тих пір, поки в стовпці не зустрінеться порожній осередок:

IRow = 1 Do Until IsEmpty(Cells(iRow, 1)) "Значення поточного осередкузберігається в масиві dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

У наведеному вище прикладі умова IsEmpty(Cells(iRow, 1))знаходиться на початку конструкції Do Until, отже цикл буде виконаний хоча б один раз, якщо перший взятий осередок не порожній.

Однак, як було показано у прикладах циклу Do WhileУ деяких ситуаціях необхідно, щоб цикл був виконаний хоча б один раз, незалежно від початкового результату умовного вираження. У такому разі умовний вираз потрібно помістити наприкінці циклу, ось так:

Do ... Loop Until IsEmpty(Cells(iRow, 1))

Крім структур прийняття рішень, існують ще один різновид керуючих конструкцій, що називається циклом.

Цикл- це алгоритмічна структура, з допомогою якої реалізується багаторазове повторення блоків операторів.

У мові Visual Basic існує три основні види циклів, які реалізується за допомогою конструкцій For: Next, Do: Loop та While: Wend.

Цикл For:Next. Використовується у тому випадку, коли кількість повторів заданого блоку операторів відома заздалегідь. Дана конструкція виглядає так:

For лічильник = початкове значення To кінцеве значення Оператори1 Оператори2 Next [лічильник]

Коли наведені оператори виконуються вперше, змінній лічильнику присвоюється початкове значення, після чого можливі два варіанти дій. Якщо в результаті перевірки умови лічильник > кінцеве значення було отримано значення True, відбувається завершення циклу, при цьому блоки оператори1 і оператори2 жодного разу не виконуються. З іншого боку, якщо результатом перевірки умови є False, то в цьому випадку блоки операторів виконуються вперше, після чого відбувається перехід на початок циклу. Далі значення змінної-лічильника збільшується на крок, розташований після ключового слова Step (у разі відсутності встановлюється крок = 1). Після цього знову перевіряється істинність умови лічильник > кінцеве значення тощо, закінчення циклу відбувається у момент, коли результатом цієї перевірки стане значення True.

Найчастіше буває необхідно "аварійно" завершувати роботу циклу під час виконання будь-якого додаткової умови. У цьому випадку всередині циклу слід використовувати службове словосполучення Exit: For, яке зазвичай розташовують у керуючій конструкції, наприклад:

If умова Then Exit For

Якщо результатом перевірки умови буде значення True, виконання циклу буде припинено, причому блок оператори1 буде виконаний черговий раз, а блок операори2 - ні.

Цикл Do:Loop. Застосовується у тому випадку, коли кількість повторень операторів тіла циклу наперед невідома. Існують чотири різновиди цієї конструкції. При використанні перших двох циклів або виконається багато разів, або не виконається взагалі.

Do Until умова Оператори Loop

Якщо результатом перевірки умови є значення False, блок оператори виконується, інакше здійснюється перехід на оператор, розташований після службового слова Loop. З іншого боку, якщо перша перевірка умови дасть результат True, цикл не виконається жодного разу.

Do While умова Оператори Loop

Якщо умова істинна, відбувається виконання блоку оператори, а якщо помилково, тобто результатом перевірки є False, то цикл не виконатися жодного разу.

У разі використання двох останніх конструкцій цикл буде виконаний хоча б один раз.

Do Оператори Loop Until умова

Блок оператори виконується до тих пір, поки результатом перевірки умови є значення False, інакше виконання циклу закінчується.

Do Оператори Loop While умова

Що стосується помилковості умови виконується блок оператори, якщо воно істинно, тобто. результатом перевірки є значення True, відбувається закінчення чикла.

Цикл While: Wend. Також використовується в тому випадку, коли кількість повторень операторів тіла циклу заздалегідь невідома і має наступний синтаксис:

While умова Оператори Wend

Якщо результатом перевірки умови є значення True, блок оператори виконується, інакше здійснюється перехід на оператор, розташований після службового слова Wend. З іншого боку, якщо перша перевірка умови дасть результат False, цикл не виконається жодного разу.

Цикл - це алгоритмічна структура,за допомогою якої реалізується багаторазове повторення блоку операторів.

Оператор циклу з лічильником (For … Next)

Інструкція For … Next дозволяє циклічно виконати набір інструкцій (операторів) задану кількість разів. Синтаксис інструкції:

For лічильник = поч_значення To кінець_значення

[інструкції]

[інструкції]

Next [ лічильник]

Параметр лічильник– це числова змінна, що автоматично змінює своє значення на величину крокпісля кожного циклу повтору. Цикл виконується доти, доки лічильник£ кінець_значенняпри позитивному значенні параметра крокабо до тих пір, поки лічильник³ кінець_значенняпри негативному значенні параметра крок. Таким чином, цикл не виконається жодного разу, якщо за позитивного значення кроку поч_значеннябільше ніж кінець_значення. Якщо параметр Step крокопущений, то за умовчанням збільшення змінної-лічильника вважається рівним 1.

Оператор Exit For завершує виконання циклу "достроково" та передає управління оператору, що йде за оператором циклу. Exit For зазвичай розміщують в умовному операторі, наприклад:

If умова Then Exit For

Примітка. За синтаксисом оператора For параметр лічильник- арифметична змінна будь-якого типу, все ж таки краще використовувати цілий тип змінної, тому що дробова частина значення змінної речовинного типу зазвичай має похибку. Це пов'язано із способом зберігання чисел у комп'ютері.

Приклад 1

Знайти суму перших 10 натуральних чисел: S = 1 + 2 + 3 + …+ 10 . Фрагмент програми:

Dim I as Integer, S as Integer

S = 0 " Обнулюємо значення змінної S

For i = 1 to 10 " Початок циклу. Задаємо початкове та кінцеве значення
"параметра циклу. Крок циклу за замовчуванням дорівнює 1.

S = S + i " Оператор присвоєння виконується за кожного
виконання циклу, в даному прикладі 10 раз

Next I " Кінець циклу. Значення параметра циклу збільшується на крок.

У цьому фрагменті програми цикл виконається рівно 10 разів.

Приклад 2

Вивести в 1-й стовпець робочого листа (починаючи з 2-го рядка) значення х в діапазоні від 0 до 3,2 з кроком 0,4.

Public Sub Табуляція()

Dim x As Single, i As Integer

For x = 0 To 3.2 Step 0.4

Хоча довжина інтервалу точно ділиться на крок 0.4, результат на робочому аркуші має вигляд:

Що ж робити?

1. Можна трохи збільшити кінцеве значення, в даному прикладі замість 3.2 написати 3.201.

2. Визначити число повторень чикла та написати цикл за лічильником цілого типу.

В даному випадку програма набуде вигляду:

Public Sub Табуляція1()

Dim x As Single, i As Integer, n As Integer

n = CInt((3.2 - 0)/0.4)

For i = 0 To n Step 1

Cells(i + 2, 1) = x

Оператор циклу For Each … Next

Цикл For Each … Next дозволяє повторити виконання групи інструкцій для кожного елемента масиву чи сімейства. Ця інструкціямає наступний синтаксис:

For Each елемент In група

[інструкції]

[інструкції]

Next [ елемент]

Параметр елемент– це змінна, яка є елементом сімейства чи масиву. Аргумент група- Ім'я масиву або сімейства. Інструкції виконуються лише один раз для кожного члена групи. Використання інструкції зручно тому, що не потрібно заздалегідь знати скільки елементів міститься в масиві або сімействі. Змінна елементповинен мати тип Variant.

Приклад 1

Знайти середнє арифметичне значення всіх елементів виділеного діапазону

Public Function Середнє(Діапазон As Range) As Double

Dim Елемент As Variant

Dim Сума As Double

Dim Кількість As Integer

Кількість = 0

For Each Елемент In Діапазон

Сума = Сума + Елемент

Кількість = Кількість + 1

Next Елемент

Середнє = Сума / Кількість

Застосування. У виділеному діапазоні суміжних осередків повинні бути числа. Числа в порожніх осередках вважаються рівними 0. Текст в осередку призведе до помилки.

Перераховані вище оператори If … End If, Select … Case, For … Next, For Each … Next є групою керуючих інструкцій, які змінюють порядок виконання команд. Керуючі інструкції можуть бути вкладені одна в одну у будь-якій послідовності.