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

VBA Excel. Цикл Do While… Loop

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

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

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

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


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


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


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

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

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

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

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

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

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

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

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

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

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

    У двух белок дупла расположены напротив друг друга. В каждом дупле по 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 While… Loop указываем «первая ячейка текущей строки не является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.

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

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

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

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

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

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

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

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

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


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

    5 комментариев для “VBA Excel. Цикл Do While… Loop”

    1. Текст похож на задачник и решебник. Вот задача и вот ответ. А как решается думайте сами, гадайте сами. Писать для себя — основная болезнь программистов.

      1. По-моему очень доступно изложено.
        Для последнего цикла немного изменил код. В нём «n» — это число сколько раз «а» достигает значения 9 и обнуляется.
        Цикл прерывается на числе итераций = 1000

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

          и так далее много столбцов

        2. «В нём «n» — это число сколько раз «а» достигает значения 9 и обнуляется.» — кажется не совсем верное объяснение. Цикл продолжается до момента n=1000, даже если a = a + 3
          Прошу меня подправить, если мои рассуждения не верны.

      2. Игорь
        23.10.2019 в 23:43
        Я не являюсь другом, знакомым, родственником для автора сайта.
        И хотя я зарегистрирован на различных excel-форумах, этот сайт у меня висит в закладках.
        Периодически ковыряю здесь «изюм»
        «… Писать для себя – основная болезнь программистов…»
        — в зеркало давно смотрели ?

        P.S.
        Единственный минус у сайта: на форумах ответ получаешь в течении 30-40 мин. Здесь приходится ждать до завтра.
        но тоже можно и понять и объяснить. На форумах, обычно 5-6 «тузов» и по мелочи в отвечающих числятся. Здесь всё в одни руки.

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