Перейти к содержимому

VBA Excel. Цикл For…Next

Цикл For...Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For...Next.

Цикл For...Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла - счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать цикл For Each... Next.

  1. Синтаксис цикла For...Next
  2. Компоненты цикла For...Next
  3. Примеры циклов For...Next

Синтаксис цикла For...Next


For counter = start To end [ Step step ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

For счетчик = начало To конец [ Step шаг ]
    [ операторы ]
    [ Exit For ]
    [ операторы ]
Next [ счетчик ]

В квадратных скобках указаны необязательные атрибуты цикла For...Next.

Компоненты цикла For...Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next [ counter ] Здесь counter - необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For...Next выполняется с шагом по умолчанию, равному 1.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For...Next

Вы можете скопировать примеры циклов в свой модуль VBA, последовательно запускать их на выполнение и смотреть результаты.

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа цифрами от 1 до 10:

Sub test1()
Dim i As Long
  For i = 1 To 10
    Cells(i, 1) = i
  Next
End Sub

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

Sub test2()
Dim i As Long
  For i = 1 To 10 Step 3
    Cells(i, 2) = i
  Next
End Sub

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

Sub test3()
Dim i As Long
  For i = 0 To -9 Step -1
    Cells(i + 10, 3) = i + 10
  Next
End Sub

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа:

Sub test4()
Dim i As Long
  For i = 0 To -9 Step -3
    Cells(i + 10, 4) = i + 10
  Next
End Sub

Вложенный цикл

Внешний цикл последовательно задает индексы первых десяти строк активного листа, а вложенный цикл складывает числа в первых четырех ячейках строки с текущем индексом и записывает сумму в ячейку пятого столбца. Перед запуском вложенного цикла с накопительным сложением, пятую ячейку соответствующей строки обнуляем, чтобы в случае нахождения в ней какого-либо числа, оно не прибавилось к итоговой сумме.

Sub test5()
Dim i1 As Long, i2 As Long
  For i1 = 1 To 10
'Пятой ячейке в строке i1 присваиваем 0
    Cells(i1, 5) = 0
      For i2 = 1 To 4
        Cells(i1, 5) = Cells(i1, 5) + Cells(i1, i2)
      Next
  Next
End Sub

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For...Next:

Sub test6()
Dim i As Long
  For i = 1 To 10
    Cells(i, 6) = Choose(i, "Медведь", "Слон", "Жираф", "Антилопа", _
    "Крокодил", "Зебра", "Тигр", "Ящерица", "Лев", "Бегемот")
  Next
End Sub

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Sub test7()
Dim i As Long
  For i = 1 To 10
    If Cells(i, 6) = "Крокодил" Then
      Cells(i, 7) = "Он съел галоши"
      Exit For
        Else
      Cells(i, 7) = "Здесь был цикл"
    End If
  Next
End Sub

Результат работы циклов For...Next из примеров:

Результат работы циклов For...Next из примеров
Результат работы циклов For...Next

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For...Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

For i = 1 To 20 Step 2
For i = a To b Step c
For i = a - 3 To 2b + 1 Step c/2   

В результате вычисления значения переменной вне цикла или выражения внутри его может получиться дробный результат. VBA Excel округлит его до целого числа, используя бухгалтерское округление:

'Значения атрибутов до округления
For i = 1.5 To 10.5 Step 2.51
'Округленные значения атрибутов
For i = 2 To 10 Step 3   

Старайтесь не допускать попадания в тело цикла For...Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте функцию рабочего листа WorksheetFunction.Round для округления числа перед использованием его в цикле For...Next.