Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

While vba excel

Канал в Telegram

Вы здесь

Работа с циклами 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). Рекомендую так же, перед запуском цикла сохранить проект.

Циклы в VBA

Встречаются ситуации, когда от программы VBA требуется совершить несколько раз подряд один и тот же набор действий (то есть повторить несколько раз один и тот же блок кода). Это может быть сделано при помощи циклов VBA.

К циклам VBA относятся:

Далее мы подробно рассмотрим каждый из этих циклов.

Оператор цикла «For» в Visual Basic

Структура оператора цикла For в Visual Basic может быть организована в одной из двух форм: как цикл For … Next или как цикл For Each.

Читать еще:  Как раздать интернет с телефона видео

Цикл «For … Next»

Цикл For … Next использует переменную, которая последовательно принимает значения из заданного диапазона. С каждой сменой значения переменной выполняются действия, заключённые в теле цикла. Это легко понять из простого примера:

В этом простом цикле For … Next используется переменная i, которая последовательно принимает значения 1, 2, 3, … 10, и для каждого из этих значений выполняется код VBA, находящийся внутри цикла. Таким образом, данный цикл суммирует элементы массива iArray в переменной Total.

В приведённом выше примере шаг приращения цикла не указан, поэтому для пошагового увеличения переменной i от 1 до 10 по умолчанию используется приращение 1. Однако, в некоторых случаях требуется использовать другие значения приращения для цикла. Это можно сделать при помощи ключевого слова Step, как показано в следующем простом примере.

Так как в приведённом выше примере задан шаг приращения равный 0.1, то переменная dTotal для каждого повторения цикла принимает значения 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

Для определения шага цикла в VBA можно использовать отрицательную величину, например, вот так:

Здесь шаг приращения равен -1, поэтому переменная i с каждым повторением цикла принимает значения 10, 9, 8, … 1.

Цикл «For Each»

Цикл For Each похож на цикл For … Next, но вместо того, чтобы перебирать последовательность значений для переменной-счётчика, цикл For Each выполняет набор действий для каждого объекта из указанной группы объектов. В следующем примере при помощи цикла For Each выполняется перечисление всех листов в текущей рабочей книге Excel:

Оператор прерывания цикла «Exit For»

Оператор Exit For применяется для прерывания цикла. Как только в коде встречается этот оператор, программа завершает выполнение цикла и переходит к выполнению операторов, находящихся в коде сразу после данного цикла. Это можно использовать, например, для поиска определённого значения в массиве. Для этого при помощи цикла просматривается каждый элемент массива. Как только искомый элемент найден, просматривать остальные нет необходимости – цикл прерывается.

Применение оператора Exit For продемонстрировано в следующем примере. Здесь цикл перебирает 100 записей массива и сравнивает каждую со значением переменной dVal. Если совпадение найдено, то цикл прерывается:

Цикл «Do While» в Visual Basic

Цикл Do While выполняет блок кода до тех пор, пока выполняется заданное условие. Далее приведён пример процедуры Sub, в которой при помощи цикла Do While выводятся последовательно числа Фибоначчи не превышающие 1000:

В приведённом примере условие iFib_Next

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.

Читать еще:  Таймер в excel

Компоненты цикла 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 деньБелка 1156
1 деньБелка 2127
2 деньБелка 1148
2 деньБелка 2167
3 деньБелка 1209
3 деньБелка 2146
4 деньБелка 12610
4 деньБелка 2135
5 деньБелка 1174
5 деньБелка 2217

Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do While… Loop указываем «первая ячейка текущей строки не является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.

Циклы VBA (ч.2). Циклы тестирующие условия до и после выполнения тела цикла

Существуют два основных способа создания неопределенного цикла. Можно построить цикл так, что VBA будет тестировать некоторое условие (детерминант цикла) либо перед выполнением цикла, либо — после выполнения цикла.

Цикл Do .. While

Конструкция цикла, тестирующая свое условие детерминанта до выполнения цикла.

Condition — логическое выражение для детерминанта цикла

Statements — один, ни одного или несколько операторов, которые составляют тело цикла

Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условия

VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True.

При выполнении цикла Do While сначала тестируется логическое выражение (Condition); если оно равно True — выполняется тело цикла. При достижении ключевого слова Loop управление опять передается в начало цикла и снова проверяется логическое выражение. Так происходит до тех пор, пока логическое выражение не станет False. Когда логическое выражение становится False — управление передается оператору, следующему за ключевым словом Loop.

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

Читать еще:  Visual basic в excel 2020

В нижеприведенном листинге представлен элементарный цикл Do While, подсчитывающий сумму цифр от 1 до 10:

Цикл Do .. Until

Еще один цикл, тестирующий условие детерминанта до выполнения цикла.

Condition — логическое выражение для детерминанта цикла

Statements — один, ни одного или несколько операторов, которые составляют тело цикла

Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условия

VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно False.

В остальном цикл Do Until полностью аналогичен циклу Do While.

Листинг, использующий цикл Do Until для подсчета цифр от 1 до 10, будет выглядеть так:

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

Цикл Do .. Loop While

Конструкция цикла, тестирующая свое условие детерминанта после выполнения цикла.

Condition — логическое выражение для детерминанта цикла

Statements — один, ни одного или несколько операторов, которые составляют тело цикла

Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла после проверки условия

VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True.

При выполнении цикла Do Loop While сначала выполняются операторы тела цикла, затем по достижении ключевого слова Loop тестируется логическое выражение (Condition); если оно равно True — управление передается в начало тела цикла и цикл повторяется снова. Так происходит до тех пор, пока логическое выражение не станет False. Когда логическое выражение становится False — управление передается оператору, следующему за строкой Loop While...

Обратите внимание! Даже если при первом выполнении цикла Do Loop While логическое выражение равно False тело цикла всё равно будет выполнено. Другими словами говоря, независимо от значения логического выражения, представленного с помощью Condition, этот цикл всегда выполняется, по крайней мере, один раз.

Листинг, использующий цикл Do Loop While для подсчета цифр от 1 до 10, будет выглядеть так:

Цикл Do .. Loop Until

Еще один цикл, тестирующий условие детерминанта после выполнения цикла.

Condition — логическое выражение для детерминанта цикла

Statements — один, ни одного или несколько операторов, которые составляют тело цикла

Loop — ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла после проверки условия

VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно False.

В остальном цикл Do Loop Until полностью аналогичен циклу Do Loop While.

Листинг, использующий цикл Do Loop Until для подсчета цифр от 1 до 10, будет выглядеть так:

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

В начало страницы

В начало страницы

Ссылка на основную публикацию
Adblock
detector