Группы и рассылки:

Вы здесь

Работа с циклами While и Until в VBA

Версия для печати

В статье " Работа с циклом For в VBA" мы рассмотрели цикл, который работает по принципу счетчика т.е. выполняется от a до n, с определенным шагом. Такой цикл подходит в тех ситуациях, когда известен интервал(кол-во проходов). Но что делать если цикл должен выполнятся столько раз, пока не наступит определенная ситуация, или наоборот, пока не наступает определенная ситуация? Для этого в Visual Basic (и не только в БЕЙСИКе) существуют циклы с условием - условные циклы.

Что такое условные циклы?

Это циклы - работа которых продолжается или завершается по указанному условию. Запись условия аналогична записи условного оператора IF.
Условные циклы могут содержать одно или более условие, используя логические операторы: И(AND), ИЛИ(OR) и НЕ(NOT).

Условный цикл Do While.

Синтаксис записи условного цикла While выглядит следующим образом:
с предусловием
 Do [While условие]
    [действия]
Loop

с постусловием
Do
    [действия]
Loop [While условие]

Разница в этих двух записях в том, что во втором случае, цикл будет выполнен хотя бы раз. Для принудительной остановки цикла можно воспользоваться командой Exit Do. Цикл Do While будет выполнятся до тех пор, пока заданное условие не выполняется.
Рассмотрим пример, в котором происходит подсчет ячеек столбца A до тех пор, пока не встретится пустая ячейка.

Public Sub Test1()
Dim i As Integer
 i = 1
    Do While Not IsEmpty(Cells(i, 1))
        i = i + 1
    Loop
 MsgBox i - 1
End Sub

Функция IsEmpty определяет, пуста ли ячейка.

Запись с постусловием и добавлением еще одного условия "и пока ячейка не содержит 2". Если в столбце встретится пустая ячейка или со значением 2, то произойдет остановка цикла, хотя последующие ячейки не пусты.

Public Sub Test2()
Dim i As Integer
 i = 1
    Do
        i = i + 1
    Loop While Not IsEmpty(Cells(i, 1)) And Cells(i, 1) <> 2
 MsgBox i - 1
End Sub

Условный цикл Do Until.

В VBA имеется еще один условный цикл Do Until...Loop. Отличие от Do While в том, что выполнение цикла будет до тех пор, пока условие выполняется.
Синтаксис записи цикла Do Until...Loop:

С предусловием
Do [Until условие]
    [действия]
Loop

 С постусловием
Do
    [действия]
Loop [Until условие]

Для принудительной остановки цикла так же используется команда Exit Do.

Рассмотрим реализацию примера выше, с помощью Do Until.

Public Sub Test3()
Dim i As Integer
 i = 1
    Do Until IsEmpty(Cells(i, 1))
        i = i + 1
    Loop
 MsgBox i - 1
End Sub

Как видите, в условии отсутствует Not.

Вот и все.

П.С.: При работе с условными циклами, будьте внимательны! Зацикливание (бесконечное выполнение) при неправильно заданном условии для этих циклов частое явление. В случае, если произошло зацикливание, воспользуйтесь сочетанием клавиш прерывания CTRL+Pause(Break). Рекомендую так же, перед запуском цикла сохранить проект.

 

 

Автор: 
Deys
Категории: 

Комментарии

Мне кажется, или здесь закралась ошибка?
Do While - инструкция выполняется, пока условие истинно
Do Until - инструкция выполняется, пока условие не станет истинным
Поправьте, если ошибка всё же в моей голове...

 

Все правильно. Do While - выполняется при истинном условии, Do Until выполняется до тех пор пока условие ложно, если условие станет истинным, цикл прекратится.

 

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Для предотвращения регистрации спам-роботов введите символы с картинки.
CAPTCHA на основе изображений
Введите символы, изображенные на картинке.
Разместить свое видео на сайте
Вы можете разместить свои 
видео-уроки на сайте
БЕСПЛАТНО!


Подробнее>>>