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 раз.

При каждом повторении этого цикла, переменная i автоматически увеличивается на 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)