Fruitsekta.ru

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

Vba excel loop

Урок 11 по VBA — Цикл do loop

И так, мы уже познакомились с циклами for next и for each next, а в этой статье рассмотрим цикл do loop vba языка. Данный цикл vba в отличии от двух предыдущих работает не по принципу перебора, а по принципу условия, то есть… Вы задаете условие выхода или выполнения цикла, а не количество итераций. Фактически, цикл do loop это гибрид цикла for next с выражением exit for.

В зависимости от синтаксиса можно задавать условие как в начале, так и в конце…

Do while Loop VBA

Do While условие
Операторы
Loop

В данном случае поверка условия идет в начале, тут задается условие выполнения VBA цикла, если условие равно True, выполнение операторов продолжается. Если условие будет равно False, произойдет выполнение операторов, следующих после ключевого слова Loop. Так как проверка условия происходит до выполнения первого оператора в теле цикла, то может возникнуть ситуация, когда условие будет ложным изначально и ничего не выполнится.

Do Loop While

Do
Операторы
Loop While условие

Как видим, проверка условия выполнении происходит в конце, поэтому как минимум один раз произойдет выполнение оператора в теле цикла.

Do Until … Loop

Do Until условие

Операторы

Loop

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

Do Loop Until

Do
Операторы
Loop Until условие

Тут происходит поверка условия выхода из цикла в конце.

Вполне возможна ситуация, когда нужно задать дополнительное условие выхода из оператора цикла VBA, для таких ситуаций служит выражение Exit Do, аналог Exit For.

Хорошо, теперь давайте напишем небольшой пример. В редакторе VBA создайте новую форму (меню Insert пункт UserForm), на ее поверхность добавьте четыре текстовые метки (класс Label) и одну кнопку (класс CommandButton). Теперь в редакторе кода для формы пропишите:

Процедура GetSumm отвечает за выполнение операторов цикла VBA, в которых происходит процесс суммирования чисел. Как видим, мы не задаем начального значения, а просто прибавляем число 1. Первые два цикла задают условие выполнения – значение переменной summ должно быть меньше или ровно 1000. Во вторых двух циклах мы задали условие выхода – значение переменной sum должно быть больше или равно 1000. Как видим, в первых двух случаях нам вывело число 1001, а во вторых – 1000. Фактически, при использовании ключевого слова while, количество выполнений оператора в блоке цикла было на один раз больше, чем при использовании ключевого слова Until.

И так, в этой статье мы рассмотрели использование цикла do while loop vba и do until loop vba, который может использоваться на ряду с циклами for next и for each. Однако, тут можно задавать или условие выполнения или условие завершения работы цикла. Также, для выхода из блока применяется выражение exit for. Цикл VBA do loop часто используется для создания зацикливания, например – прослушивание системы на запуск заданной программы.

Для общего развития, можете посмотреть примеры использования цикла Do Loop в языке VBScript сервера сценариев Windows Script Host, который, как уже упоминалось, является сородичем языка Visual Basic for Applications.

Читать еще:  Формула для расчета возраста в 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 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 существует в двух вариантах, определяющих, когда проверяется условие.

Читать еще:  Поменять знак числа excel

Условие проверяется до выполнения операторов:

Условие проверяется после выполнения операторов:

В квадратных скобках указаны необязательные атрибуты цикла Do While… Loop.

Компоненты цикла 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 позволяет ни разу не выполнять операторы внутри него.

Читать еще:  Specialcells в excel

В нижеприведенном листинге представлен элементарный цикл 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