Цикли здійснюють повторення інструкцій кілька разів, та можуть заощадити багато часу.
В Excel VBA існують наступні типи циклів:
Наступний код вставляє послідовність чисел в кожну комірку колонки A (від 1 до 12):
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
Цей код є дуже повторюваний...
Уявіть, якщо би ми мусіли вставляти послідовні числа в сотні комірок замість тільки 12... Тепер ви розумієте чому цикли є дуже корисними.
Наведемо приклад порожнього циклу While:
Sub while_loop() While [умова] 'Інструкції Wend End Sub
Поки умова буде дійсною, інструкції в циклі будуть продовжувати виконуватись (але будьте обережні, щоби не зробити нескінченний цикл).
Нижче є повторюваний макрос, який був розглянутий спочатку, перетворений у While цикл:
Sub while_loop() Dim num As Integer num = 1 'Початкове число (в даному випадку, це є номер рядка та значення, яке проставляється) While num <= 12 'Допоки змінна num буде менше або рівне 12, - то інструкції будуть виконуватися Cells(num, 1) = num 'Нумерування num = num + 1 'Число збільшується на 1 під час кожного проходу циклу Wend End Sub
Використовуючи цей цикл в макросі, все щоби ми мали би зробити, якби на треба було 400 стрічок замість 12, це замінити 12 на 400.
Існує інший спосіб написати цикл, що працює так само, як While Wend (виконується так довго, допоки дійсна певна умова, що міститься у While команді):
Sub do_while_loop() Do While [умова] 'Інструкції Loop End Sub
В наступному варіанті показано, що умова може бути прописана в кінці циклу Do Loop, що означає, що інструкції будуть точно виконані щонайменше один раз:
Sub do_while_loop() Do 'Інструкції Loop While [умова] End Sub
Замість того, щоби повторювати цикл поки виконується умова, можна також вийти з циклу по умові, якщо ми замінимо While на Until:
Sub do_while_loop() Do Until [умова] 'Інструкції Loop End Sub
Sub for_loop() For i = 1 To 5 'Інструкції Next End Sub
Цикл For буде повторюватись тут 5 разів.
При кожному повторені цього циклу, змінна і автоматично збільшується на 1:
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
Можливо вийти з циклу For завчасно, скориставшись наступною інструкцією:
Exit For 'Вихід з циклу For
Давайте розглянемо приклад, який наочно це покаже:
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'В комірці A1 ми вказали ліміт кількості повторень For i = 1 To 7 'Очікувана кількість циклів : 7 If i > max_loops Then 'Якщо комірка A1 є пустою чи містить число менше 7, - то зменшити кількість повторень Exit For 'Якщо попередня умова є TRUE, то вихід з циклу For...loop End If MsgBox i Next End Sub
Інші оператори Exit:
Exit Do 'Вихід з циклу Do Loop
Exit Sub 'Вихід з процедури
Exit Function 'Вихід з функції