Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Цикл For… Next

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

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

    Синтаксис цикла 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:

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    61 комментарий для “VBA Excel. Цикл For… Next”

    1. Спасибо Вам большое за помощь! Буду пробовать! Нашел еще один код, не пойму как его применить, я так понял ищет 6 ячеек влево
      WorksheetFunction.CountA(ActiveCell.Offset(0,-6).Resize(1,6))

      1. Евгений

        Применение функции WorksheetFunction.CountA позволит сделать код еще компактней:

    2. Спасибо Вам огромное что помогаете своими советами и делитесь своими знаниями!!!

    3. Здравствуйте! Подскажите, пожалуйста, как сделать цикл с функцией =СЦЕПИТЬ(A1;B1;C1), чтобы получилось как в примере, каждое значение столбца было сцеплено уникальным образом с другими значениями

      A B C
      1 большой красный мяч
      2 мокрый синий плащ
      3 дырявый черный сапог

      большой красный мяч
      мокрый красный мяч
      дырявый красный мяч
      большой синий мяч
      большой черный мяч

      1. Евгений

        Здравствуйте, Ольга!
        Для вашего примера код будет такой:

    4. Добрый день!
      Подскажите, пожалуйста, как правильно написать код VBA. Задача следующая: составлено 64 листа с вопросами (тест). Тест для пользователя должен состоять из 25 рандомных вопросов, но,
      12 рандомных вопросов должны выпасть из диапазона с 1 по 40 лист;
      3 рандомных вопроса из диапазона с 41 по 49;
      3 рандомных вопроса из диапазона с 50 по 57;
      7 вопросов из диапазона с 58 по 64 листы должны попасть все.
      Все не выбранные листы должны скрыться, а выбранные видны пользователю для прохождения тестирования. Изначально когда перебирал весь диапазон, использовал этот код:

    5. Подскажите, пожалуйста.

      Если в этом случае девятку заменить на количество указанное в ячейке, что-то типа:

      Как правильно оформляется такая запись?

    6. Добрый день! Помогите сделать циклами, не получается.
      Есть 4 поля A, B, С, D. Количество строк неизвестно. Необходимо выбрать все значения «ОК» из поля C и при этом все пустые соответствующие ячейки из поля D. И для этих ячеек закрасить соответствующие ячейки в поле А и B.

      1. Евгений

        Здравствуйте, Сергей!
        Вам нужно что-то вроде этого:

        "OK" в примере — латиницей.

        1. Я уже успел сделать таким же образом до вашего ответа) Но все равно спасибо!

    7. Здравствуйте. Очень нужна помощь.
      В столбце записаны числа. Подразумевается их счёт 1 2 3 4 1 2 3 4… Нужно с помощью vba получить сумму всех чисел с порядковый номером 4

      1. Евгений

        Добрый день, Андрей!
        Для столбца "A":

    Обсуждение закрыто.