Оператор For Next відноситься до операторів циклів. З його допомогою блок операторів може виконуватися певну кількість разів. Ця кількість повторень вказується до початку виконання циклу.
Зміст уроку:
Синтаксис For…Next в VBA
For счётчик = початок To кінець[Step крок]
(блок операторів, які мають виконуватися при кожному проході циклу)
Next лічильник
Тут,
- лічильник (лічильник циклу) – це будь-яка числова змінна, яка зберігає в собі кількість виконаних проходів циклу.
- початок – це числовий вираз, який задає початкове значення лічильника для визначення кількості проходів циклу.
- кінець – числовий вираз, що задає кінцеве значення лічильника для визначення кількості проходів циклу.
- крок – числовий вираз, який зберігає в собі число, на яке збільшуватиметься лічильник при кожному проході циклу.
Step (крок) є необов'язковим елементом конструкції. За замовчуванням, якщо не вказувати в конструкції Step (крок), то інтерпретатор VBA при кожному виконанні блоку операторів збільшуватиме лічильник на 1. Якщо ж вам потрібно змінити той стандартний крок, то потрібно вказувати Step.
Примітка.
В операторі Next вказувати лічильник не обов'язково, але я настійно рекомендую це робити для покращення читабельності вашого коду.
Навіть якщо ви не вкажете лічильник після ключового слова Next, виявивши його (ключове слово Next), VBA автоматично обчислить наступне значення змінної лічильник (збільшить її на 1, або на число вказане в змінній крок) і поверне управління на початок конструкції.
Давайте напишемо перший приклад програми з циклом For … Next і покроково розберемо її виконання.
Приклад For … Next
Sub myCode()
Dim myNum As String
For a = 1 To 12
myNum = myNum & a & Chr(13)
Next a
MsgBox "Виводимо послідовність чисел від 1 до 12:" & Chr(13) & myNum
End Sub
Результат
У цьому прикладі:
- Перший рядок Sub myCode() – це назва нашої процедури (програми).
- Другий рядок Dim myNum As String – оголошення рядкової змінної myNum.
- Третій рядок For a = 1 To 12 – початок нашого циклу. Тут вираз a = 1 є лічильником. А 12 – це кінець циклу.
- Четвертий рядок – це оператори, які потрібно виконувати при кожному проході по циклу.
- П'ятий рядок Next a – говорить про те, що управління має бути повернено на початок циклу. Виконання програми продовжується з порівняння поточного значення змінної a (це значення вже дорівнює 2, а не 1) зі значенням параметра кінець (який нагадаю, дорівнює 12). І так відбуватиметься доти, поки значення змінної a не стане більше 12. Коли a буде більше 12, програма продовжить своє виконання з оператора, який слідує за оператором Next. Тобто, буде виведено повідомлення MsgBox.
- Шостий рядок End Sub – кінець нашої процедури (програми).
Примітка.
Напевно, вам стало дуже цікаво, навіщо я використав Chr(13) при виведенні повідомлення. Справа в тому, що Chr(13) – це символ повернення каретки при виведенні якого курсор переміщається до лівого краю поля. Тобто простими словами – це перенесення рядка.
Давайте розглянемо ще один приклад використання циклу For … Next у якому ми виведемо у повідомленні лише непарні цифри.
Приклад циклу For … Next з елементом Step
Sub myCode()
Dim myNum As String
For a = 1 To 12 Step 2
myNum = myNum & a & Chr(13)
Next a
MsgBox "Виводимо послідовність чисел від 1 до 12:" & Chr(13) & myNum
End Sub
Результат
У цьому прикладі ми додали крок рівний 2. Тобто при проході циклу, змінна a збільшується на 2 і таким чином ми отримуємо вивід у повідомленні лише непарних цифр: 1, 3, 5, 7, 9, 11.
Цикл For … Next з дробовим значенням збільшення лічильника
Числове значення після ключового слова Step може бути як цілим, так і дробовим. Але якщо ви вирішили використовувати дробове число для збільшення кроку циклу, то змінна лічильника теж повинна мати тип числа з плаваючою точкою.
Приклад коду
Sub myCode()
Dim myNum As String
Dim a As Single
b = 0
For a = 1.609344 To 10 Step 1.609344
b = b + 1
myNum = myNum & b & " km" & " = " & a & " миль" & Chr(13)
Next a
MsgBox "Переводимо кілометри в милі:" & Chr(13) & myNum
End Sub
Результат
Цикл For … Next зі зменшенням значення лічильника
Іноді, може виникнути потреба записати цикл зі зменшенням значення лічильника. У такому випадку після оператора Step вказують від'ємне число.
Використовуючи такий спосіб створення циклу, потрібно пам'ятати, що значення параметра початок має бути більшим, ніж значення параметра кінець і цикл закінчить своє виконання тоді, коли значення змінної лічильник стане меншим за значення параметра кінець.
Приклад коду
Sub myCode()
Dim myNum As String
For a = 1 To -10 Step -1
myNum = myNum & a & Chr(13)
Next a
MsgBox "Це послідовність цифр із негативним кроком:" & Chr(13) & myNum
End Sub
Результат
Пам'ятайте.
При зменшенні лічильника, цикл For … Next буде виконуватися до тих пір, поки значення лічильника буде більшим за значення параметра кінець, або поки воно не стане рівним йому.
При збільшенні лічильника, цикл For … Next буде виконуватися до тих пір, поки значення лічильника буде меншим за значення параметра кінець, або поки воно не дорівнюватиме йому.
Вкладені цикли For … Next
В одній і тій самій процедурі, цикли For … Next можна використовувати необмежену кількість разів. При необхідності їх можна вкладати один в інший.
Приклад коду
Sub myCode()
myNum = 0
For x = 1 To 5
For y = 1 To 5
Cells(x, y).Value = myNum
Next y
Next x
End Sub
Результат
У цьому прикладі ми заповнюємо в Excel комірки перших п'яти стовпців і перших п'яти рядків цифрою 0.
Якщо ви самостійно не розібралися як працює цей код, то ось опис послідовності виконання операцій в ньому:
- Змінній myNum присвоюється значення 0. Ця цифра буде вставлятися в комірки.
- Починається перший (зовнішній) цикл For … Next. На першому проході по циклу, значення змінної x = 1.
- Виконується вкладений цикл For … Next. Відбувається 5 проходів циклу, у ході яких змінна y збільшується на 1 при кожному проході циклу.
- Завершується внутрішній цикл.
- Перший (зовнішній) цикл робить ще 4 проходи, що залишилися.
Таким чином спочатку повністю виконується вкладений цикл, а потім вже зовнішній.
Негайний вихід з циклу за допомогою Exit For
Іноді виникає необхідність негайно припинити виконання циклу For … Next ще до того, як змінна лічильник досягне заданого кінцевого значення. Це робиться за допомогою оператора Exit For.
Негайний вихід із циклу дуже зручно використовувати під час перевірки масивів на наявність неприпустимих значень. Наприклад, коли приходять якісь некоректні дані, виконання програми відразу припиняється.
Приклад коду
Sub myCode()
myNum = 0
For x = 1 To 5
Cells(x, 1).Value = myNum
myNum = myNum + 1
If myNum >= 2 Then
MsgBox "Зупиняємо цикл, тому що значення змінної myNum більше або дорівнює 2"
Exit For
End If
Next x
End Sub
Результат
В одному циклі може бути записана будь-яка кількість операторів Exit For. Після виконання цього оператора програма відразу ж припиняє виконання циклу і переходить до операторів, які розташовані в тексті відразу після цього циклу.