Цикл 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(*результат_вычисления*,*кол-во_знаков*)
Ниже находится файл с заданием и решением к нему.