Найти тему
VBA Excel с нуля

VBA Excel № 56. Do Loop в VBA.

Оглавление

Один из типов циклов, который мы рассмотрим, - это циклы Do While и Do Until. Они позволяют выполнять определенный блок кода до тех пор, пока заданное условие выполняется.

Цикл Do While

Цикл Do While выполняется, пока заданное условие истинно. Вот два варианта синтаксиса:

1. С условием в начале:

Do While [условие]

' Инструкции

[Exit Do]

Loop

Скриншот с моего ноутбука
Скриншот с моего ноутбука

2. С условием в конце:

Do

' Инструкции

[Exit Do]

' Дополнительные инструкции

Loop While [условие]

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Разница между ними заключается в моменте проверки условия: в первом случае блок кода может вообще не выполняться, если условие изначально ложно, а во втором случае код выполняется, как минимум, один раз.

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

Sub EnterDates1()

' Цикл Do While, условие проверяется в начале

Dim TheDate As Date

TheDate = DateSerial(Year(Date), Month(Date), 1)

Do While Month(TheDate) = Month(Date)

ActiveCell = TheDate

TheDate = TheDate + 1

ActiveCell.Offset(1, 0).Activate

Loop

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Что делает код:

1. Sub EnterDates1(): Начало объявления подпрограммы.

2. Dim TheDate As Date: Объявление переменной TheDate как переменной типа Date для хранения дат.

3. TheDate = DateSerial(Year(Date), Month(Date): Инициализация переменной TheDate с первым днем текущего месяца, используя функции DateSerial, Year и Month.

4. Do While Month(TheDate) = Month(Date): Начало цикла Do While, где условие проверяется в начале. Цикл будет выполняться, пока месяц переменной TheDate соответствует текущему месяцу.

5. ActiveCell = TheDate: Устанавливает значение активной ячейки равным значению TheDate.

6. TheDate = TheDate + 1: Увеличивает значение TheDate на 1 день.

7. ActiveCell.Offset(1, 0).Activate: Перемещает активную ячейку на следующую строку.

8. Loop: Завершает цикл Do While.

9. End Sub: Завершение объявления подпрограммы.

Цикл Do Until

Цикл Do Until, в отличие от Do While, выполняется, пока заданное условие не станет истинным (т.е. до тех пор, пока ложь). Синтаксис аналогичен Do While, но проверка условия происходит в обратном порядке.

Вот два варианта синтаксиса для цикла Do Until:

1. С условием в начале:

Do Until [условие]

' Инструкции

[Exit Do]

Loop

2. С условием в конце:

Do

' Инструкции

[Exit Do]

' Дополнительные инструкции

Loop Until [условие]

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Для иллюстрации, давайте посмотрим пример использования цикла Do Until, который выполняет те же действия, что и предыдущий пример с циклом Do While:

Sub EnterDates2()

' Цикл Do Until, условие проверяется в начале

Dim TheDate As Date

TheDate = DateSerial(Year(Date), Month(Date), 1)

Do Until Month(TheDate) <> Month(Date)

ActiveCell = TheDate

TheDate = TheDate + 1

ActiveCell.Offset(1, 0).Activate

Loop

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Оба типа циклов Do While и Do Until являются хорошими инструментами в VBA и используются в зависимости от конкретных требований задачи.

Наука
7 млн интересуются