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

VBA Excel. Цикл Do Until… Loop

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

    Цикл Do Until… Loop в VBA Excel предназначен для повторения блока операторов пока не выполняется заданное условие (возвращается значение False). Синтаксис этого цикла аналогичен синтаксису цикла Do While… Loop, который повторяется до тех пор, пока условие выполняется (возвращается значение True).

    Синтаксис цикла Do Until… Loop

    Синтаксис цикла Do Until… Loop существует в двух вариантах, определяющих, когда проверяется условие.


    Условие проверяется до выполнения операторов:


    Условие проверяется после выполнения операторов:


    В квадратных скобках указаны необязательные атрибуты цикла Do Until… Loop.

    Компоненты цикла Do Until… Loop

    Компонент Описание
    condition Обязательный атрибут. Условие выполнения цикла. Выражение, возвращающее значение типа Boolean.
    statements Необязательный* атрибут. Операторы вашего кода.
    Exit Do Необязательный атрибут. Оператор выхода** из цикла до его окончания.

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

    **Очень полезный оператор для цикла Do Until… Loop, так как при некоторых обстоятельствах он может стать бесконечным. Если такой риск существует, следует предусмотреть возможность выхода из бесконечного цикла с помощью оператора Exit Do.

    Примеры циклов Do Until… Loop

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

    Цикл Do Until… Loop с условием до исполняемых операторов:

    Цикл Do Until… Loop с условием после исполняемых операторов:

    В обоих случаях окно MsgBox выведет число 10. Когда значение переменной a будет равно 10, проверяемое условие выдаст значение True, и цикл будет остановлен.

    Проход по строкам листа

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

    Дни Игрок Брошено Попало в цель
    1 день Белка 1 15 6
    1 день Белка 2 12 7
    2 день Белка 1 14 8
    2 день Белка 2 16 7
    3 день Белка 1 20 9
    3 день Белка 2 14 6
    4 день Белка 1 26 10
    4 день Белка 2 13 5
    5 день Белка 1 17 4
    5 день Белка 2 21 7

    Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do Until… Loop указываем «первая ячейка текущей строки является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.

    Результат, выведенный в информационном сообщении, будет равен 40. Вы можете скопировать таблицу на свой лист книги Excel и поэкспериментировать с кодом VBA.

    Бесконечный цикл и Exit Do

    Пример бесконечного цикла:

    При запуске этой процедуры цикл Do Until… Loop начинает выполняться бесконечно. Мне приходилось останавливать бесконечные циклы VBA в Excel 2000 и Excel 2016. В Excel 2000 помогло сочетание клавиш Ctrl+Break, а в Excel 2016 при закрытии редактора VBA крестиком появляется окно:

    Информационное окно «Microsoft Excel не отвечает»
    Информационное окно «Microsoft Excel не отвечает»

    Ожидать отклика программы нет смысла, поэтому нажимаем «Перезапустить программу» или «Закрыть программу».

    Совет: перед запуском процедуры с циклом Do Until… Loop, который может стать бесконечным, обязательно сохраните книгу, иначе, при принудительном закрытии редактора VBA ваши изменения будут утеряны. Кроме того, при принудительном закрытии редактора VBA, Excel может отключить макросы. Включите их в окне «Центр управления безопасностью», открыть которое можно по ссылке «Безопасность макросов» на ленте в разделе «Разработчик». Подробнее о включении макросов в разных версиях Excel читайте в статье: Как разрешить выполнение макросов в Excel?.

    Пример использования оператора Exit Do:

    Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное сообщение MsgBox выведет на экран число повторений цикла Do Until… Loop из этого примера.


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