Цикл Do в VBA

  • Автор записи:
  • Запись опубликована:17.06.2022
  • Рубрика записи:Excel / VBA

Цикл Do, равно как и цикл For, позволяет ускорить и автоматизировать рутинные, повторяющиеся действия, а также улучшить читаемость кода.

Существует некоторое количество форм цикла Do. Формы различаются моментом проверки условия выполнения.

Цикл Do While … Loop

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

К примеру, цикл-счетчик в формате этого цикла будет выглядеть следующим образом.

Do While a < 5
    a = a + 1
    MsgBox (a)
Loop

Результатом выполнения цикла будет последовательный вывод информационных сообщений, содержащих цифры от 1 до 5.

Цикл Do … Loop While

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

Do
    a = a + 1
    MsgBox a
Loop While a < 5

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

При написании цикла Do (в цикле For это исключено) может возникнуть такая ситуация, что макрос при запуске будет выполняться “вечно”. Такая ситуация обусловлена логикой цикла Do. Цикл Do будет выполняться, если возвращаемое условие истинно (True). Ниже будут приведены два примера бесконечного цикла.

Чтобы самому остановить выполнение цикла можно воспользоваться сочетанием клавиш Ctrl + Pause/Break (PB).

Do
    x = x + 1
    MsgBox x
Loop While x > 0

Цикл выше никогда не остановит свою работу самостоятельно, так как в данном случае “x” никогда не будет меньше или равен нулю.

For Each cell In Range(Cells(1, 1), Cells(10, 1))
    Do While cell.Value <= 0
        cell.Value = cell.Row
    Loop
Next cell

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

Задача на усвоение материала

Необходимо к узнать цену каждого товара в таблице. Решить задачу с использованием цикла Do While … Loop. Получившийся результат округлить до 2х знаков после запятой (можно воспользоваться функцией Round(*результат_вычисления*,*кол-во_знаков*)

цикл do vba

Ниже находится файл с заданием и решением к нему.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.