Все, что вам нужно знать о том, как создать цикл VBA в Excel

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

Скачать готовый шаблон

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

В VBA есть две основные категории циклов:

  • Для…Следующие циклы
  • Делать циклы

В общем случае, циклы while For…Циклы Next рассчитаны на определенное количество итераций, циклы Do подходят для выполнения итераций на основе условия. Однако вы можете изменять и настраивать оба типа циклов по их отдельным ключевым словам. Давайте рассмотрим типы циклов на примерах.

Для…Следующий цикл VBA

Для…Далее (также известный как цикл For) начинается создание циклов VBA в Excel. Цикл For — это базовая концепция структуры цикла во всех языках программирования. A For…Следующий цикл хорош, если вы хотите повторить свой код определенное количество раз, и когда вам нужно использовать счетчик. Например, если вы хотите проверить ячейки от A1 до A10, в этом случае может сработать счетчик нажатий от 1 до 10. Давайте посмотрим на его синтаксис и пример.

Синтаксис

отконца до начала = счетчик для [ Пошаговых действий]
[ инструкций]
[ Выхода для ]
[ инструкций]
Далее [ счетчик]

Часть Описание
счетчик Обязательно. Числовая переменная, используемая в качестве счетчика цикла. Переменная не может быть логическим значением или элементом массива.
запустите Обязательно. Начальное значение счетчика.
завершение Обязательно. Конечное значение счетчика.
шаг Необязательно. Количество счетчика изменяется каждый раз на протяжении цикла. Если не указано, значение шага по умолчанию равно единице.
инструкции Необязательно. Один или несколько операторов между For и Next, которые выполняются определенное количество раз.

Пример 1 – Базовая форма

В первом примере For…В следующем цикле мы пытаемся записать серийные номера в ячейки A1: A10. В этом коде For…Следующий цикл устанавливает значения от 1 до 10 в переменную i. После того, как переменная получит свое значение, вы можете использовать его в коде. Мы использовали переменную для указания номеров строк и значений ячеек. Наконец, следующая строка увеличивает строку переменной на 1, и цикл продолжается до тех пор, пока переменная не станет равной 11.

Sub заполняет SerialNumbers()
 Затемните i как целое число
 Для i = от 1 до 10
 ActiveSheet.Ячейки (i, 1) = i
 Далее i
Завершите Sub

Как создать циклы VBA в Excel

Пример 2–шаговый

По умолчанию, Для…Следующий цикл увеличивает свою переменную counter на 1 для каждого цикла. Вы можете изменить это свойство, используя аргумент step. Чтобы указать аргумент step, используйте ключевое слово Step после аргумента end и введите число. Шаг может быть как положительным, так и отрицательным.

Следующий код является модифицированной версией первого примера. Аргумент шага 2 добавлен в цикл. В этом цикле переменная i может принимать только «1, 3, 5, 7, 9» значения.

Подполним serialnumbers_step2()
 Уменьшим i как целое число
 Для i = от 1 до 10 Шаг 2
 ActiveSheet.Ячейки (i, 1) = i
 Далее я
End Sub

Не забудьте выбрать соответствующие аргументы start и end , когда вам нужно использовать отрицательное значение step. Например, для I = от 10 до 1 шага -1

Пример 3 – Вложенные циклы

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

Важным моментом является использование разных переменных счетчика для каждого цикла. В противном случае будут происходить скачки значений счетчика. Давайте посмотрим пример вложенных циклов For…Следующие циклы.

Следующий код содержит 2 цикла For…Следующие циклы, в которых используются переменные с именами i и j. На панели инструкций i и j используются в качестве номеров строк и столбцов соответственно.

При первом запуске i становится 1, а j становится 2. После выполнения кода в j-цикле, пока i сохраняет свое значение (1), j становится 3. Этот цикл продолжается до тех пор, пока j не станет 7. После этого i становится 2, а j возвращается обратно к 2.

Sub FillSerialNumbers_Nested()
 Укажите i как целое число, j как целое число
 Для i = от 1 до 10
 Для j = от 2 до 6
 ActiveSheet.Ячейки (i, j) = i * j
 Следующий j
 Следующий i
End Sub

Поскольку j содержит числа от 2 до 6, заполняются только столбцы от B до F.

Пример 4 – Выход для

Возможно, вам захочется выйти из цикла при выполнении определенного условия. Допустим, мы не хотим заполнять ячейки, если i * j больше 18. Для достижения этой цели мы можем использовать инструкцию Exit For.

Следующий код использует Exit For во внутреннем цикле. Пожалуйста, обратите внимание, что Exit For работает только для цикла, в котором он находится. Таким образом, когда выполняется условие i * j > 18, VBA продолжает выполнять внешний цикл (i-loop).

Sub FillSerialNumbers_ExitFor()
 Укажите i как целое число, j как целое число
 Для i = от 1 до 10
 Для j = от 2 до 6
 Если i * j > 18, то завершите работу для 
 ActiveSheet.Ячейки (i, j) = i * j
 Следующий j
 Следующий i
Завершите Sub

Пример 5 — Для каждого

Цикл For Each — это более специализированная версия цикла For…Следующие циклы. Для каждого цикла можно выполнять итерации для элементов в списке. Этими элементами могут быть значения в массиве, ячейки в диапазоне или листы в рабочей книге. Для каждого цикла не требуется счетчик, каждый элемент хранится в переменной, которая будет использоваться в коде.

Давайте рассмотрим другой пример. На этот раз используется не переменная counter, а объект range c. Для каждого цикла элементу c присваивается каждая ячейка в диапазоне «A1: C8» на каждой итерации. Кроме того, поскольку значение счетчика отсутствует, нам нужно увеличить целое число на 1 в коде.

Sub FillSerialNumbers_ForEach()
 Укажите c как диапазон, i как целое число
 i = 0
 Для каждого c в ActiveSheet.Диапазон("A1:C8")
 i = i + 1
 c = i
 Следующий c
End Sub

Это последний пример для For…Следующие циклы нашего руководства по созданию цикла VBA в Excel. Теперь давайте перейдем к циклам Do.

Выполните цикл VBA

Цикл Do проверяет, выполнено ли условие для продолжения циклического выполнения или остановки цикла. Циклы Do более гибкие, чем For…Циклы Next. С другой стороны, такая гибкость сопряжена с некоторыми сложностями.

Цикл Do начинается с Do и заканчивается ключевыми словами цикла. Вы можете определить условие для одного из этих операторов. Если вы указываете условие с помощью Do, VBA сначала просматривает условие; в противном случае выполняется блок кода в цикле, а условие вычисляется в конце. Эта гибкость обеспечивает 2 синтаксиса.

Кроме того, циклы Do могут использовать ключевые слова While и Until, чтобы указать действие при выполнении условия. Если вы используете ключевое слово While , цикл продолжает работать при выполнении условия. С другой стороны, ключевое слово Until останавливает цикл.

Синтаксис

Выполняйте [{ While | Until } условие ]
[ инструкции]
[ Завершите выполнение ]
[ инструкции]
Цикл

Или вы можете использовать этот синтаксис:

Выполните
[ инструкции ]
[ Exit Do ]
[ инструкции]
Цикл [{ While | Until } условие]

Часть Описание
условие Необязательно. Числовое выражение или строковое выражение, которое является истинным или ложным. Если условие равно нулю, условие обрабатывается как False.
инструкции Один или несколько операторов, которые повторяются во время выполнения условия или до тех пор, пока оно не станет истинным.

Пример 1 – Do While

Цикл Do While повторяет свои инструкции до тех пор, пока выполняются указанные условия. Мы можем модифицировать наш первый пример для работы с циклом Do.

В следующем примере цикл Do выполняется столько итераций, сколько переменная i равна или меньше 10.

Sub FillSerialNumbers_DoWhile()
 Укажите i как целое число
 i = 1
 Выполняйте, пока i <= 10
 ActiveSheet.Ячейки (i, 1) = i 
 i = i + 1
 Цикл
End Sub

Внимание: Если вы используете подобный цикл, не забудьте добавить код для изменения значения переменной. В противном случае код застрянет в бесконечном цикле, потому что переменная i всегда будет оставаться меньше 10.

Пример 2 — Делайте, пока

На этот раз цикл продолжается «до» выполнения условия. Как только это произойдет, цикл завершается.

Sub FillSerialNumbers_DoUntil()
 Укажите i как целое число
 i = 1
 Выполняйте, пока i > 10
 ActiveSheet.Ячейки (i, 1) = i 
 i = i + 1
 Цикл
End Sub

Пример 3 – Цикл While

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

Loop While выполняет итерацию цикла, если заданное условие выполнено.

Sub FillSerialNumbers_DoLoopWhile()
 Укажите i как целое число
 i = 1
 Выполните 
 ActiveSheet.Ячейки (i, 1) = i 
 i = i + 1
 Цикл, пока i <= 10
End Sub

Пример 4 – Цикл до

Используйте инструкцию Loop Until, когда вам нужно проверить условие после инструкций и вы хотите продолжить цикл «до» выполнения условия.

Sub FillSerialNumbers_DoLoopUntil()
 Укажите i как целое число
 i = 1
 Выполните 
 ActiveSheet.Ячейки (i, 1) = i 
 i = i + 1
 Цикл до ввода-вывода > 10
End Sub

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

Автор А. Днепров

Обучаю основам работы с офисными программами.

Все, что вам нужно знать о том, как создать цикл VBA в Excel
Как убрать изменение масштаба колесом мыши в Excel