TOP
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
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
Sub while_loop()
While [условие]
'Инструкции
Wend
End Sub
Пока условие будет действительным, инструкции в цикле будут продолжать выполняться (но будьте осторожны, чтобы не сделать бесконечный цикл).
Ниже есть повторяющийся макрос, который был рассмотрен сначала, преобразован в While цикл:
- Sub while_loop ()
-
- Dim num As Integer
- num = 1
-
- While num <= 12
- Cells (num, 1) = num
- num = num + 1
- Wend
-
- End Sub
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
Sub do_while_loop()
Do While [условие]
'Инструкции
Loop
End Sub
В следующем варианте показано, что условие может быть прописано в конце цикла Do Loop , что означает, что инструкции будут точно выполнены по меньшей мере один раз:
- Sub do_while_loop()
-
- Do
-
- Loop While [условие]
-
- End Sub
Sub do_while_loop()
Do
'Инструкции
Loop While [условие]
End Sub
Вместо того, чтобы повторять цикл пока выполняется условие, можно выйти из цикла по условию, если мы заменим While на Until:
- Sub do_while_loop()
-
- Do Until [условие]
-
- Loop
-
- End Sub
Sub do_while_loop()
Do Until [условие]
'Инструкции
Loop
End Sub
FOR
- Sub for_loop()
-
- For i = 1 To 5
-
- Next
-
- End Sub
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
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")
-
- For i = 1 To 7
- If i> max_loops Then
- Exit For
- End If
-
- MsgBox i
- Next
-
- End Sub
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)