VBA-Урок 8.1. Цикли (Loops)

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

Наступний код вставляє послідовність чисел в кожну комірку колонки 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

Наведемо приклад порожнього циклу 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.

DO LOOP

Існує інший спосіб написати цикл, що працює так само, як 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

FOR

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 'Якщо умова є ПРАВДА, вихід з циклу For loop
       End If
   
       MsgBox i
    Next

End Sub

Інші оператори Exit:

Exit Do 'Вихід з циклу Do Loop
Exit Sub 'Вихід з процедури
Exit Function 'Вихід з функції

Статті по темі:

  • VBA-Урок 7.2. Умови (Conditions)
  • VBA-Урок 8.2. Цикли (Loops)