Найти в Дзене
Макрос решает

VBA в Excel: Цикл Do Until — надёжный способ избежать бесконечности

Циклы — это основа автоматизации в VBA. Если вы хотите, чтобы Excel выполнял повторяющиеся действия сам, пока выполняется (или не выполняется) определённое условие — вам сюда. Сегодня мы подробно разберём все виды циклов Do: На реальных примерах покажем, в чём их различия и когда какой использовать. А ещё — оформим код максимально наглядно, как и просили! Это конструкция, которая повторяет действия до тех пор, пока выполняется (или не выполняется) некоторое условие. В отличие от цикла For, здесь количество повторений заранее неизвестно — выполнение зависит от значения переменной или содержимого ячеек. Этот цикл выполняется до тех пор, пока условие не станет ИСТИННО. То есть мы продолжаем делать что-то, пока условие ЛОЖНО. Например, переберём ячейки в столбце A, пока не встретим пустую:
Dim x As Integer
x = 2
Do Until Cells(x, 1).Value = ""
Cells(x, 1).Interior.Color = RGB(255, 255, 0)
x = x + 1
Loop
Как это работает: А теперь то же самое, но условие у нас в конце, а не в начал
Оглавление

Циклы — это основа автоматизации в VBA. Если вы хотите, чтобы Excel выполнял повторяющиеся действия сам, пока выполняется (или не выполняется) определённое условие — вам сюда. Сегодня мы подробно разберём все виды циклов Do:

  • Do Until
  • Loop Until
  • Do While
  • Loop While
  • Exit Do

На реальных примерах покажем, в чём их различия и когда какой использовать. А ещё — оформим код максимально наглядно, как и просили!

🔁 Что такое цикл Do?

Это конструкция, которая повторяет действия до тех пор, пока выполняется (или не выполняется) некоторое условие. В отличие от цикла For, здесь количество повторений заранее неизвестно — выполнение зависит от значения переменной или содержимого ячеек.

1. Цикл Do Until

Этот цикл выполняется до тех пор, пока условие не станет ИСТИННО. То есть мы продолжаем делать что-то, пока условие ЛОЖНО.

Например, переберём ячейки в столбце A, пока не встретим пустую:


Dim x As Integer

x = 2

Do Until Cells(x, 1).Value = ""

Cells(x, 1).Interior.Color = RGB(255, 255, 0)

x = x + 1

Loop

Как это работает:

  • начинаем с ячейки A2,
  • закрашиваем её,
  • переходим к следующей,
  • как только ячейка пуста — выходим из цикла.

2. Цикл Loop Until

А теперь то же самое, но условие у нас в конце, а не в начале.

_

Dim x As Integer

x = 2

Do

Cells(x, 1).Interior.Color = RGB(255, 255, 0)

x = x + 1

Loop Until Cells(x, 1).Value = ""

_

Главная особенность: действие выполнится хотя бы один раз, даже если условие сразу истинно.

Это удобно, если вы хотите, чтобы хотя бы одна итерация обязательно прошла.

3. Цикл Do While

Здесь цикл выполняется, пока условие истинно. Если оно сразу ложно — не произойдёт вообще ничего.

_

Dim x As Integer

x = 2

Do While Cells(x, 1).Value <> ""

Cells(x, 1).Interior.Color = RGB(200, 255, 200)

x = x + 1

Loop

_

Отличие от Do Until в логике:

  • Do Until работает, пока условие ЛОЖНО,
  • Do While работает, пока условие ИСТИННО.

Очень важно не запутаться в логике и не попасть в бесконечный цикл.

📌 Подписывайтесь на канал, если вы только начинаете изучать макросы — мы всё объясняем на примерах, без воды и с практикой!

4. Цикл Loop While

Это противоположность Do While: условие в конце, а не в начале. То есть:

  • как минимум одна итерация будет выполнена,
  • после этого проверится условие.
_

Dim x As Integer

x = 2

Do

Cells(x, 1).Interior.Color = RGB(200, 255, 200)

x = x + 1

Loop While Cells(x, 1).Value <> ""

_

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

5. Выход с помощью Exit Do

Иногда не нужно, чтобы условие было строго в начале или в конце. Можно выйти из цикла по своему условию — прямо внутри тела цикла.

_

Dim x As Integer

x = 2

Do

If Cells(x, 1).Value = "" Then Exit Do

Cells(x, 1).Interior.Color = RGB(255, 200, 200)

x = x + 1

Loop

_

Преимущество:

  • Вы можете использовать несколько условий,
  • Делать выход более гибким (например, по ошибке, по совпадению значения и т.п.).

Сравнение конструкций

-2

Заключение: какой цикл выбрать?

Вот несколько советов:

  • Если важно проверить условие до входа в цикл — используйте Do Until или Do While.
  • Если вы хотите выполнить действия хотя бы один раз — выбирайте Loop Until или Loop While.
  • Если условия сложные и могут изменяться во время выполнения — Exit Do даёт полную гибкость.

Напишите в комментариях, какой цикл вам показался самым удобным! А если остались вопросы — не стесняйтесь, я отвечаю всем 💬

📌 Подпишитесь на канал, чтобы не пропустить новые уроки по Excel и VBA — каждый из них делает вас быстрее, умнее и свободнее от рутины!