TOP

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

Циклы осуществляют повторение инструкций несколько раз, и могут сэкономить много времени.

Следующий код вставляет последовательность чисел в каждую ячейку колонки A (от 1 до 12):

  1. Sub while_loop()  
  2.   
  3.     Cells(1, 1) = 1  
  4.     Cells(2, 1) = 2  
  5.     Cells(3, 1) = 3  
  6.     Cells(4, 1) = 4  
  7.     Cells(5, 1) = 5  
  8.     Cells(6, 1) = 6  
  9.     Cells(7, 1) = 7  
  10.     Cells(8, 1) = 8  
  11.     Cells(9, 1) = 9  
  12.     Cells(10, 1) = 10  
  13.     Cells(11, 1) = 11  
  14.     Cells(12, 1) = 12  
  15.   
  16. End Sub  

Этот код очень повторяющийся...

Представьте, если бы мы должны были вставлять последовательные числа в сотни ячеек вместо только 12... Теперь вы понимаете почему циклы являются очень полезными.

WHILE

Приведем пример пустого цикла While:

  1. Sub while_loop()  
  2.   
  3.     While [условие]  
  4.         'Инструкции  
  5.     Wend  
  6.   
  7. End Sub  

Пока условие будет действительным, инструкции в цикле будут продолжать выполняться (но будьте осторожны, чтобы не сделать бесконечный цикл).

Ниже есть повторяющийся макрос, который был рассмотрен сначала, преобразован в While цикл:

  1. Sub while_loop ()  
  2.   
  3.      Dim num As Integer  
  4.      num = 1 'Начальное число (в данном случае, это номер строки и значение, которое проставляется)  
  5.   
  6.      While num <= 12 'Пока переменная num будет <= 12, инструкции будут выполняться  
  7.         Cells (num, 1) = num 'Нумерация  
  8.         num = num + 1 'Число увеличивается на 1 при каждом проходе цикла  
  9.      Wend  
  10.          
  11. End Sub  

Используя этот цикл в макросе, все чтобы мы должны были бы сделать, если бы нам надо было 400 строк вместо 12, это заменить 12 на 400.

DO LOOP

Другой способ написать цикл, который работает так же, как While Wend (выполняется так долго, пока действительно определенное условие, содержащееся в While команде):

  1. Sub do_while_loop()  
  2.   
  3.     Do While [условие]  
  4.         'Инструкции  
  5.     Loop  
  6.   
  7. End Sub  

В следующем варианте показано, что условие может быть прописано в конце цикла Do Loop , что означает, что инструкции будут точно выполнены по меньшей мере один раз:

  1. Sub do_while_loop()  
  2.   
  3.     Do  
  4.         'Инструкции  
  5.     Loop While [условие]  
  6.   
  7. End Sub  

Вместо того, чтобы повторять цикл пока выполняется условие, можно выйти из цикла по условию, если мы заменим While на Until:

  1. Sub do_while_loop()  
  2.   
  3.     Do Until [условие]  
  4.         'Инструкции  
  5.     Loop  
  6.   
  7. End Sub  

FOR

  1. Sub for_loop()  
  2.   
  3.     For i = 1 To 5  
  4.         'Инструкции  
  5.     Next  
  6.   
  7. End Sub  

Цикл For будет повторяться здесь 5 раз.

При каждом повторении этого цикла, переменная i автоматически увеличивается на 1:

  1. Sub for_loop()  
  2.   
  3.     For i = 1 To 5  
  4.         MsgBox i  
  5.     Next  
  6.   
  7. End Sub  

Ранний выход из цикла

Возможно выйти из цикла For заранее, воспользовавшись следующей инструкцией:
  1. Exit For 'Выход из цикла For  
Давайте рассмотрим пример, который наглядно покажет:
  1. Sub for_loop ()  
  2.      Dim max_loops As Integer  
  3.      max_loops = Range ("A1"'В A1: мы указали лимит количества повторений  
  4.   
  5.      For i = 1 To 7 'Ожидаемое количество циклов: 7  
  6.         If i> max_loops Then 'Если A1 является пустой или содержит число < 7, уменьшить количество повторений  
  7.             Exit For 'Если условие ПРАВДА, выход из цикла For loop  
  8.         End If  
  9.      
  10.         MsgBox i  
  11.      Next  
  12.   
  13. End Sub  

Другие операторы Exit :

  1. Exit Do 'Выход из цикла Do Loop  
  1. Exit Sub 'Выход из процедуры  
  1. Exit Function 'Выход из функции  

Статьи по теме:

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