For next vba excel перехід до наступного. Оператори циклу в VBA. Проект «Дохід за вкладом»

Зустрічаються ситуації, коли від програми 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))

Оператори циклу

У VBA існують два основних типи циклів - цикли з лічильником (параметричні) та цикли з умовою (ітераційні).

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

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

Цикли з параметром For … Next

Структура циклу:

For Параметр_Цикла = Початкове_Значення To Кінцеве_Значення

[ Step Крок]

Оператори

[ Exit For ]

Next [Параметр_Цикл]

де For ключове слово VBA (від), що означає початок циклу;

Параметр_цикла - змінна, визначена як лічильник циклу;

Початкове_Значення число, що задає початкове значення параметра циклу;

To | ключове слово VBA (до), що розділяє

Початкове_значення та Кінцеве_Знання;

Кінцеве_Значення число, що задає значення параметра циклу,

При якому цикл завершується;

Step ключове слово VBA (крок), що використовується для

Завдання кроку циклу, необов'язковий аргумент;

Крок число, що задає крок циклу, тобто. значення, на яке

Збільшується (або зменшується) значення параметра

Цикл на кожному кроці. Це число може бути

Негативним;

Exit For оператор дострокового виходу з циклу (необов'язковий);

Next ключове слово VBA (наступний), що позначає

Кінець циклу.

Робота циклу:

Крок 1 Спочатку визначається параметр циклу, а також обчислюються та запам'ятовуються початкове та кінцеве значення цієї змінної.

Крок 2 Параметру циклу надається початкове значення.

Крок 3 Початкове значення циклу порівнюється з кінцевим значенням.

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

Крок 4 Виконується тіло циклу.

Крок 5 Після виконання тіла циклу відбувається надання параметру циклу наступного значення. Перехід до кроку 3.

Примітка.

1. Якщо використовується ключове слово Step , то параметр циклу змінюється відповідно до числа, вказаного після цього слова. Якщо слово Step відсутня, то значення кроку дорівнює одиниці.

приклад 1.

For I = 0 To 10 Step 2 (Значення I буде збільшуватися на 2)

2. Цикл For … Next може бути перервано достроково при досягненні будь-якої умови. Для цього у потрібному місці циклу потрібно помістити оператор Exit For.

приклад 2.

Dim S As Integer

Dim j As Integer

S = 2

For j = 1 To 10

S = S + j

If S > 6 Then

Exit For (Вихід із циклу, якщо значення S> 6)

End If

Next j

MsgBox (S)

Цикли з умовою (ітераційні)

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

У VBA є два основні цикли DO … LOOP ¦ з умовою, що вводиться ключовим словом While , і з умовою, що вводиться ключовим словом Until . Обидва можуть бути з передумовою чи з постумовою.

Синтаксис:

де Do ключове слово (робити);

While ключове слово (поки що);

Until ключове слово (до тих пір поки);

Loop ключове слово, що вказує на закінчення циклу;

<условие>логічний вираз, істинність якого перевіряється

На початку кожного виконання тіла циклу;

<тело_цикла>довільна послідовність операторів;

Конструкція Do … While читається: робити поки що виконується умова. У конструкції Do … While For

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

Умова, записана після ключового слова Until , перевіряється наприкінці кожної ітерації (після виконання тіла циклу). Звернути увагу, що воно працює тут не зовсім так, як у циклі While . Якщо умова є істинною ( True ), то виконання циклу завершується. Якщо умова не виконується (є хибною | False ), то знову виконується тіло циклу.

приклад 1.

Постановка задачі. Обчислити суму кінцевого ряду за допомогою підпрограми-процедури.

Технологія виконання завдання:

1. Вихідні дані: i  Z

Результат: S  R .

2.Набрати в стандартному модулі проекту наступну користувальницьку процедуру, використовуючи цикл з передумовою While:

Sub summa()

Dim S As Integer

Dim i As Integer

S = 0

i = 1

Do While i<= 10

S = S + i^2

i = i + 1

Loop

MsgBox (S)

End Sub

3.Набрати в стандартному модулі проекту наступну користувальницьку процедуру, використовуючи цикл із передумовою Until:

Sub summa()

Dim S As Integer

Dim i As Integer

S = 0

i = 1

Do Until i > 10

S = S + i^2

i = i + 1

Loop

MsgBox (S)

End Sub

4 Набрати в стандартному модулі проекту наступну процедуру користувача, використовуючи цикл з постумовою While:

Sub summa()

Dim S As Integer

Dim i As Integer

S = 0

i = 1

S = S + i^2

i = i + 1

Loop While i<= 10

MsgBox (S)

End Sub

5 Набрати в стандартному модулі проекту наступну користувальницьку процедуру, використовуючи цикл із постумовою Until:

Sub summa()

Dim S As Integer

Dim i As Integer

S = 0

i = 1

S = S + i^2

i = i + 1

Loop Until i > 10

MsgBox (S )

End Sub

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

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

Оператор циклу дозволяє нам виконувати оператор чи групу операторів кілька разів. Нижче наведено загальний вигляд оператора циклу VBA.

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

for цикл

Цикл for - це структура управління повторенням, яка дозволяє розробнику ефективно писати цикл, який необхідно виконати певну кількість разів.

Синтаксис

Нижче наведено синтаксис циклу for VBA.

For counter = start To end .... .... Next

Діаграма потоку

Нижче наведено потік управління в режимі Loop -

  • Перший крок виконується. Цей крок дозволяє ініціалізувати будь-які змінні керування контурами та збільшувати змінну лічильника кроків.
  • По-друге, умова оцінюється. Якщо це правда, виконується тіло циклу. Якщо воно помилкове, тіло циклу не виконується, і потік управління переходить до наступного оператора відразу після циклу For.
  • Після виконання циклу For потік управління переходить до наступного оператора. Цей оператор дозволяє вам оновлювати будь-які змінні керування циклом. Він оновлюється з урахуванням значення лічильника кроків.
  • Умову тепер оцінюють знову. Якщо це правда, цикл виконується, і процес повторюється (тіло циклу, потім збільшують крок, а потім знову умова). Після того, як умова стає хибною, цикл For закінчується.

приклад

Додайте кнопку та додайте наступну функцію.

Private Sub Constant_demo_Click() Dim a As Integer a = 10 For i = 0 To a Step 2 MsgBox "Це значення є:"

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

The value is i is: 0
The value is i is: 2
The value is i is: 4
The value is i is: 6
The value is i is: 8
The value is i is: 10

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

for ... loop

Для кожного циклу використовується для виконання оператора або групи операторів для кожного елемента масиву або колекції.

Для кожного циклу аналогічний For Loop; однак цикл виконується для кожного елемента в масиві чи групі. Отже, лічильник кроків нічого очікувати існувати у цьому типі циклу. Він переважно використовується з масивами або використовується в контексті об'єктів файлової системипрацювати рекурсивно.

Синтаксис

Нижче наведено синтаксис циклу For Each у VBA.

For Each element In Group .... Next

приклад

Private Sub Constant_demo_Click() "fruits is array fruits = Array("apple", "orange", "cherries") Dim fruitnames As Variant" iterating using For each loop. For Each Item In fruits fruitnames = fruitnames & Item & Chr(10) Next MsgBox fruitnames End Sub

Коли цей код виконується, він друкує всі імена фруктів з одним елементом у кожному рядку.

apple
orange
cherries

Це виконується, якщо у групі є хоча б один елемент та повторюється для кожного елемента у групі.

while..wend loop

У циклі While While ... Wend , якщо умова дорівнює True, всі оператори виконуються доти, доки не зустрінеться ключове слово Wend.

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

Синтаксис

Нижче наведено синтаксис циклу While..Wend у VBA.

While condition(s) ... Wend

Діаграма потоку

приклад

Private Sub Constant_demo_Click() Dim Counter: Counter = 10 While Counter< 15 " Test value of Counter. Counter = Counter + 1 " Increment Counter. msgbox "The Current Value of the Counter is: " & Counter Wend " While loop exits if Counter Value becomes 15. End Sub

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

Current Value of the Counter є: 11
Current Value of the Counter є: 12
Current Value of the Counter є: 13
Current Value of the Counter є: 14
Current Value of the Counter є: 15

Це перевіряє перед виконанням тіла циклу.

Цикл do..while

Do ... while цикл використовується, коли ми хочемо повторити набір операторів, поки умова істинна. Умову можна перевірити на початку циклу або наприкінці циклу.

Синтаксис

Нижче наведено синтаксис циклу Do ... While у VBA.

Do While condition ... ... Loop

Діаграма потоку

приклад

У наступному прикладі використовується цикл Do...while для перевірки стану на початку циклу. Оператори всередині циклу виконуються лише якщо умова стає True.

Private Sub Constant_demo_Click() Do While i< 5 i = i + 1 msgbox "The value of i is: " & i Loop End Sub

The value of i is: 1
The value of i is: 2
The value of i is: 3
The value of i is: 4
The value of i is: 5

Альтернативний синтаксис

Існує також альтернативний синтаксис для Do...while loop, який перевіряє стан наприкінці циклу. Основне різницю між цими двома синтаксисами пояснюється в наступному прикладі.

Do ... ... Loop While condition

приклад

У наступному прикладі використовується цикл Do...while для перевірки стану наприкінці циклу. Заяви всередині циклу виконуються хоча б один раз, навіть якщо умова False.

Private Sub Constant_demo_Click() i = 10 Do i = i + 1< 3 "Condition is false.Hence loop is executed once. End Sub

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

The value of i is: 11

Оператори do..While будуть виконуватися доти, доки умова дорівнює True. (Т. е.) Петля повинна повторюватися доти, доки умова нічого очікувати False.

do..intil loop

Do ... intil цикл не буде використаний, коли ми хочемо повторити набір операторів, поки умова хибна. Умову можна перевірити на початку циклу або наприкінці циклу.

Синтаксис

Нижче наведено синтаксис циклу Do..Until у VBA.

Do Until condition ... ... Loop

Діаграма потоку

приклад

У наступному прикладі використовується Do ... До циклу, щоб перевірити умову початку циклу. Оператори всередині циклу виконуються тільки в тому випадку, якщо умова є хибною. Він виходить із циклу, коли умова стає істинною.

Private Sub Constant_demo_Click() i = 10 Do Until i>15 "Конфігурація є False.Hence loop will be executed i = i + 1 msgbox"

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

The value of i is: 11
The value of i is: 12
The value of i is: 13
The value of i is: 14
The value of i is: 15
The value of i is: 16

Альтернативний синтаксис

Існує також альтернативний синтаксис Do... До циклу, який перевіряє умову наприкінці циклу. Основне різницю між цими двома синтаксисами пояснюється наступним прикладом.

Do ... ... Loop Until condition

Діаграма потоку

приклад

У наступному прикладі використовується Do ... До циклу, щоб перевірити умову в кінці циклу. Оператори всередині циклу виконуються хоча б один раз, навіть якщо умова дорівнює True.

Private Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "Визначення i: " & i Loop Until i more15 "Конфігурація є true.Hence loop is executed once. End Sub

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

The value of i is: 11

Оператори do..Until будуть виконуватися доти, доки умова False. (Т. е.) Петля має повторюватися до того часу, поки умова нічого очікувати істинним.

Записи управління циклом

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

Контрольна заява та опис

Вихід для оператора

Вихід for використовується, коли ми хочемо вийти з For Loop на основі певних критеріїв. Коли Exit For виконується, керування переходить до наступного оператора відразу після циклу For Loop.

Синтаксис

Нижче наведено синтаксис Exit For Statement у VBA.

Діаграма потоку

приклад

У наступному прикладі використовується Exit For. Якщо значення лічильника досягає 4, цикл For Loop завершується, і керування переходить до наступного твердження відразу після циклу For Loop.

Private Sub Constant_demo_Click() Dim a As Integer a = 10 For i = 0 To a Step 2 "i є counter variable і it incremented by 2 MsgBox ("The value is i is: " & i) If i = 4 Then i = i * 10 "This is executed on if i=4 MsgBox ("The value is i is: " & i) Exit For "Exited when i=4 End If Next End Sub

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

The value is i is: 0
The value is i is: 2
The value is i is: 4
The value is i is: 40

Завершує оператор циклу For та передає виконання в оператор відразу після циклу

Exit Do

Exit Do Заява використовується, коли ми хочемо вийти з Do Loops на основі певних критеріїв. Він може використовуватися як у Do Do...While, так і Do... До циклів.

Коли Exit Do виконується, керування переходить до наступного оператора одразу після Do Loop.

Синтаксис

Нижче наведено синтаксис виразу Exit Do у VBA.

приклад

У наступному прикладі використовується Exit Do. Якщо значення лічильника досягає 10, вихідна лінія Do завершується, і керування переходить до наступного оператора відразу після циклу For Loop.

Private Sub Constant_demo_Click() i = 0 Do While i<= 100 If i >10 Then Exit Do "Loop Exits if i>10 End If MsgBox ("The Value of i is: " & i) i = i + 2 Loop End Sub

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

The Value of i is: 0
The Value of i is: 2
The Value of i is: 4
The Value of i is: 6
The Value of i is: 8
The Value of i is: 10

Завершує оператор Do While та передає виконання в оператор відразу після циклу

Лабораторні роботи з основ програмування

2.1. Табулювання функцій, представлених аналітично
і схожим поруч

Мета роботи

· Закріплення теоретичних знань з основ організації розгалужуваних і циклічних структур.

· Придбання практичних навичок програмування з використанням розгалужуваних та циклічних структур у системі Visual Basic.

У VB існують три види операторів циклу:

· Рахунковий цикл: For ... To ... Next

· цикли з передумовами: Do While ... Loop, Do Until ... Loop, While ... WEnd

· цикли з постумовами: Do ... Loop While, Do ... Loop Until.

Рахунковий цикл – дозволяє циклічно виконувати набір операторів задану кількість разів. Його синтаксис наступний:

For лічильник = початок To кінець

[оператори]

[оператори]

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

Параметр лічильник– це числова змінна (цілого, речового типу або типу Date, Variant, Currency), яка автоматично збільшується після кожного повтору. Початкове значення лічильникадорівнює параметру початок,а кінцевий параметр – кінець.Якщо не вказано, крок вважається рівним 1, значення кроку можна змінювати. Воно може бути позитивним чи негативним числом.

Існують чотири синтаксичні конструкції циклу Do….Loop:

Оператори між ключовими словами Do … Loop виконуються задану кількість разів, залежно від умови. Наприклад, у наступному фрагменті програми при C = 100 умова виконуватиметься і відбудеться вхід у цикл. Усередині циклу відбувається звернення до процедури та зменшення значення C на 1. Далі знову перевіряється умова (C > 0) і оператори циклу виконуються повторно (всього вони виконуються 100 разів), до C = 0. Коли ж умова C >0 стає хибною і цикл припиняється.

Do While C > 0

Той самий фрагмент програми, виконаний з використанням циклу з передумовою синтаксису 2:

В даному випадку цикл виконується, поки умова дорівнює False, на відміну від попереднього випадку, тобто продовжується довиконання умови C=0.

Оператори циклів синтаксису 3 і 4 дуже схожі на перші два за винятком того, що умова необчислюється до тих пір, поки цикл не виконається хоча б один раз.

У синтаксисах цих циклів можна використовувати оператори безумовного виходу з циклу Exit For та Exit Do, що дозволяють передати керування оператору, який перебуває за циклом. Наприклад, у наступному фрагменті програми, якщо початкове значення C виявиться >50, цикл негайно припинитися.



Do Until C<= 0

MsgBox “Поч. значення більше допустимого”, ”Помилка введення”

Цикл While…Wend використовувався у ранніх версіях Visual Basic. Його синтаксис наступний:

While<условие>

<Операторы>

На відміну від циклу Do..Loop цикл While ..Wend немає другого варіанта, у якому перевірка умови виконується наприкінці циклу. Крім того, для нього немає оператора виходу з циклу, на зразок Exit Do.

VBA. Організація циклів.

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

VBA підтримує циклічні конструкції двох видів:

  1. Цикли з фіксованою кількістю повторень ( цикли з лічильником).
  2. Цикли з невизначеною кількістю повторень ( цикли з умовою).

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

Фіксовані цикли

VBA надає дві керуючі структури для організації фіксованого циклу: For … Next (цикл із лічильником) та For Each … Next (цикл із перерахуванням).

Оператор For … Next це типовий цикл із лічильником, що виконує задану кількість ітерацій. Синтаксис оператора For … Next:

For<счетчик> = <начЗначение>То<конЗначение>

<блок операторов>

Next [<счетчик>]

Приклад використання оператора For … Next.

Лістинг 1. Оператор For … Next

‘ ЗАВДАННЯ: Скласти програму, яка отримує два числа від користувача.

‘ Складає всі числа в діапазоні, заданому цими двома числами, а потім

' відображає результуючу суму.

Sub sample7()

Dim i As Integer 'лічильник циклу

Dim sStart ‘початкове значення лічильника

Dim sEnd ‘кінцеве значення лічильника

Dim sSum As Long 'результуюча сума

sStart = InputBox(“Введіть перше число:”)

sEnd = InputBox(“Введіть друге число:”)

sSum = 0

For i = CInt(sStart) To CInt(sEnd)

sSum = sSum + i

Next i

MsgBox “Сума чисел від ” & sStart & ” до ” & sEnd & ” дорівнює: ” & sSum

End Sub

Оператор циклу For Each … Nextналежить категорії операторів об'єктного типу, тобто. застосовується в першу чергу до колекційоб'єктів, а також до масивів . Тіло циклу виконується фіксоване число разів, що відповідає числу елементів масиву чи колекції. Формат оператора For Each … Next:

For Each<элемент>In<группа> <блок операторов>Next [<элемент>]

Цикли з умовою (невизначені цикли)

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

  • Чотири види циклів Do..Loop, які відрізняються типом умов, що перевіряються, і часом виконання цієї перевірки.
  • Безперервний цикл While … Wend.

Цикл Do While … Loop – типовий цикл із передумовою. Умова перевіряється перед тим, як виконується тіло циклу. Цикл продовжує свою роботу, поки це<условие>виконується (тобто має значення True). Так як перевірка виконується на початку, тіло циклу може жодного разу не виконатися. Формат циклу Do While … Loop:

Do While<условие>

<блок операторов>

Loop

Лістинг 2. Цикл Do While … Loop

‘ ЗАВДАННЯ: Скласти програму, яка передбачає введення користувачем

' довільної послідовності чисел. Введення має бути припинено

тільки після того, як сума введених непарних чисел перевищить 100.

Sub sample8()

Dim OddSum As Integer 'сума непарних чисел

Dim OddStr As String 'рядок з непарними числами

Dim Num 'для прийому введених чисел

OddStr = “” ‘ініціалізація вихідного рядка

OddSum = 0 'ініціалізація суми OddSum

Do While OddSum< 100 ‘начало цикла

Num = InputBox(“Введіть число:”)

If (Num Mod 2)<>0 Then ‘перевірка на парність

OddSum = OddSum + Num 'накопичення суми непарних чисел

OddStr = OddStr & Num & ” ”

End If

Loop

виведення рядка з непарними числами

MsgBox prompt:=”Непарні числа: ” & OddStr

End Sub

Оператор Do … Loop Whileпризначений для організаціїциклу з постумовою. Умова перевіряється після того, як тіло циклу буде виконано хоча б один раз. Цикл продовжує свою роботу, поки<условие>залишається справжнім. Формат циклу Do … Loop While:

Do<блок операторов>Loop While<условие>

Лістинг 3. Цикл із постумовою

' ЗАВДАННЯ: Скласти програму гри “Вгадай число”. Програма має випадковим

' чином генерувати число в діапазоні від 1 до 1000, користувач повинен

' вгадати це число. Програма на кожне число, що вводиться, виводить підказку

' "Більше або менше".

Sub sample8()

Randomize Timer ' ініціалізація генератора випадкових чисел

Dim msg As String ' рядок повідомлення

Dim SecretNumber As Long, UserNumber As Variant

Begin: SecretNumber = Round(Rnd * 1000) ‘ число, згенероване комп'ютером

UserNumber = Empty ‘ число, яке вводиться користувачем

Do ’ ігровий процес

Select Case True

Case IsEmpty(UserNumber): msg = "Введіть число"

Case UserNumber > SecretNumber: msg = "Занадто багато!"

Case UserNumber< SecretNumber: msg = “Слишком мало!”

End Select

UserNumber = InputBox(prompt:=msg, Title:="Вгадай число")

Loop While UserNumber<>SecretNumber

' перевірка

If MsgBox(“Грати ще?”, vbYesNo + vbQuestion, “Ви вгадали!”) = vbYes Then

GoTo Begin

End If

End Sub

Цикли Do Until … Loop та Do … Loop Until є інверсіями раніше розглянутих циклів із умовою. У випадку вони працюють аналогічно, крім те, що тіло циклу виконується за хибному умові (тобто.<условие>= False). Формат циклу Do Until … Loop:

Do Until<условие> <блок операторов>Loop

Формат циклу Do … Loop Until:

<блок операторов>

Loop Until<условие>

Практичне завдання:Перепишіть програми з лістингів 10 та 11 з використанням інвертованих операторів циклу.

Цикл While … Wend також відноситься до циклів з умовою. Цей операторповністю відповідає структурі Do While… Loop. Формат циклу While … Wend:

While<условие>

<блок операторов>

Wend

Відмінною рисою цього оператора є неможливість примусового завершення(переривання) тіла циклу (оператор Exit Do не працює у циклі While … Wend).

Переривання циклу

Для дострокового завершення ітерації та виходу із циклу застосовується оператор Exit. Цей оператор застосовується в будь-якій циклічній структурі, крім While... Wend. Загальний синтаксис використання Exit для переривання циклу такий:

<начало_цикла>

[<блок операторов1>]

Exit (For | Do)

[<блок операторов2>]

<конец_цикла>

При виконанні оператора Exit цикл переривається, і керування передається оператору, що йде за оператором<конец_цикла>. У тілі циклу може бути кілька операторів Exit.

Лістинг 4. Примусовий вихід із циклу

Sub sample9()

For i = 1 To 10000000

If i = 10 Then Exit For ' вихід із циклу, коли лічильник досягне 10

Next




Top