Цикл For… Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For… Next.
Цикл For… Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла — счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать цикл For Each… Next.
Синтаксис цикла For… Next
1 2 3 4 5 |
For counter = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ] |
1 2 3 4 5 |
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, последовательно запускать их на выполнение и смотреть результаты.
Простейший цикл
Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:
1 2 3 4 5 6 |
Sub test1() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub |
Простейший цикл с шагом
В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:
1 2 3 4 5 6 |
Sub test2() Dim i As Long For i = 1 To 10 Step 3 Cells(i, 2) = i Next End Sub |
Цикл с отрицательными аргументами
Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:
1 2 3 4 5 6 |
Sub test3() Dim i As Long For i = 0 To -9 Step -1 Cells(i + 10, 3) = i + 10 Next End Sub |
Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:
1 2 3 4 5 6 |
Sub test4() Dim i As Long For i = 0 To -9 Step -3 Cells(i + 10, 4) = i + 10 Next End Sub |
Вложенный цикл
Внешний цикл последовательно задает индексы первых десяти строк активного листа, а вложенный цикл складывает числа в первых четырех ячейках строки с текущем индексом и записывает сумму в ячейку пятого столбца. Перед запуском вложенного цикла с накопительным сложением, пятую ячейку соответствующей строки обнуляем, чтобы в случае нахождения в ней какого-либо числа, оно не прибавилось к итоговой сумме.
1 2 3 4 5 6 7 8 9 10 |
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:
1 2 3 4 5 6 7 |
Sub test6() Dim i As Long For i = 1 To 10 Cells(i, 6) = Choose(i, "Медведь", "Слон", "Жираф", "Антилопа", _ "Крокодил", "Зебра", "Тигр", "Ящерица", "Лев", "Бегемот") Next End Sub |
Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».
1 2 3 4 5 6 7 8 9 10 11 |
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 из примеров:

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For… Next.
Цикл с дробными аргументами
Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:
1 2 3 |
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 округлит его до целого числа, используя бухгалтерское округление:
1 2 3 4 |
'Значения атрибутов до округления For i = 1.5 To 10.5 Step 2.51 'Округленные значения атрибутов For i = 2 To 10 Step 3 |
Старайтесь не допускать попадания в тело цикла For… Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте в коде VBA функцию рабочего листа WorksheetFunction.Round для округления числа перед использованием его в цикле For… Next.
Спасибо Вам большое за помощь! Буду пробовать! Нашел еще один код, не пойму как его применить, я так понял ищет 6 ячеек влево
WorksheetFunction.CountA(ActiveCell.Offset(0,-6).Resize(1,6))
Применение функции WorksheetFunction.CountA позволит сделать код еще компактней:
Спасибо Вам огромное что помогаете своими советами и делитесь своими знаниями!!!
Здравствуйте! Подскажите, пожалуйста, как сделать цикл с функцией
=СЦЕПИТЬ(A1;B1;C1)
, чтобы получилось как в примере, каждое значение столбца было сцеплено уникальным образом с другими значениямиA B C
1 большой красный мяч
2 мокрый синий плащ
3 дырявый черный сапог
большой красный мяч
мокрый красный мяч
дырявый красный мяч
большой синий мяч
большой черный мяч
Здравствуйте, Ольга!
Для вашего примера код будет такой:
Спасибо!
Добрый день!
Подскажите, пожалуйста, как правильно написать код VBA. Задача следующая: составлено 64 листа с вопросами (тест). Тест для пользователя должен состоять из 25 рандомных вопросов, но,
12 рандомных вопросов должны выпасть из диапазона с 1 по 40 лист;
3 рандомных вопроса из диапазона с 41 по 49;
3 рандомных вопроса из диапазона с 50 по 57;
7 вопросов из диапазона с 58 по 64 листы должны попасть все.
Все не выбранные листы должны скрыться, а выбранные видны пользователю для прохождения тестирования. Изначально когда перебирал весь диапазон, использовал этот код:
Подскажите, пожалуйста.
Если в этом случае девятку заменить на количество указанное в ячейке, что-то типа:
Как правильно оформляется такая запись?
Добрый день! Помогите сделать циклами, не получается.
Есть 4 поля A, B, С, D. Количество строк неизвестно. Необходимо выбрать все значения «ОК» из поля C и при этом все пустые соответствующие ячейки из поля D. И для этих ячеек закрасить соответствующие ячейки в поле А и B.
Здравствуйте, Сергей!
Вам нужно что-то вроде этого:
"OK"
в примере — латиницей.Я уже успел сделать таким же образом до вашего ответа) Но все равно спасибо!
Здравствуйте. Очень нужна помощь.
В столбце записаны числа. Подразумевается их счёт 1 2 3 4 1 2 3 4… Нужно с помощью vba получить сумму всех чисел с порядковый номером 4
Добрый день, Андрей!
Для столбца
"A"
:Обсуждение закрыто.