Remkomplekty.ru

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

Vba excel цикл while

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

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

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

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

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

ШКОЛА ПРОГРАММИРОВАНИЯ

Вы здесь

Сообщение об ошибке

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

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

Читать еще:  Условие в условии excel

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

Это циклы — работа которых продолжается или завершается по указанному условию. Запись условия аналогична записи условного оператора 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). Рекомендую так же, перед запуском цикла сохранить проект.

Программирование циклов, цикл do while

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

Оператор While

Общий вид оператора While:

Оператор While предназначен для организации цикла-пока.

Инструкции будут выполняться пока выражение будет истинно.

Пример. Вычислить сумму чисел от 0 до 100.

В переменной s накапливается значение суммы.

Оператор Do While

Общий вид оператора Do While:

Оператор Do While предназначен для организации цикла-пока.

Инструкции будут выполняться пока выражение будет истинно. Конструкция Exit Do предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Оператор Do Loop Until

Общий вид оператора Do Loop Until:

Оператор Do Loop Until предназначен для организации цикла-до.

Инструкции будут выполняться до момента, когда выражение станет истинным. Конструкция Exit Do предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Оператор For

Общий вид оператора For:

Оператор For предназначен для организации цикла-для.

Инструкции будут выполняться определенное количество раз, задаваемое в счетчик, начиная с начального значение (начальное_знач) до конечного значения (конечное_знач) с некоторым шагом (шаг). Конструкция Exit For предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Примеры решения задач

Пример 1. Представить таблицу квадратов чисел от 2 до 10.

Для отображения результатов воспользуемся Excel и для доступа к ячейкам функцией Cells (номер_строки, номер_колонки).

Пример 2

Пример 2. Составить программу определения наибольшего общего делителя (НОД) двух натуральных чисел.

Наибольший общий делитель двух натуральных чисел — это самое большое натуральное число, на которое они делятся. Например, у чисел 12 и 18 наибольшие делители: 2, 3, 6. наибольшим общим делителем является число 6. Это записывается так:

Идея алгоритма Евклида для нахождения НОД основана на том свойстве, что если M>N, то

НОД(M, N) = НОД(M-N, N).

Иначе говоря, НОД двух натуральных чисел равен НОД их положительной разности и меньшего числа.

Пример 3

Пример 3. Построить график функции: улитку Паскаля.

Улитка Паскаля задается следующим образом:

1. Подготовить данные в электронной таблице

2. Ввести код программы.

3. Построить график с помощью мастера диаграмм, выбрав точечную диаграмму.

4. Изменить данные a и b.

Циклы в VBA

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

Читать еще:  Vba excel поиск подстроки в строке

К циклам 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:loop, for each, for next

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

Языки программирования предоставляют различные структуры управления, которые обеспечивают более сложные пути выполнения.

Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз. Ниже приведен общий вид оператора цикла в VBA.

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

for цикл

Цикл for — это структура управления повторением, которая позволяет разработчику эффективно писать цикл, который необходимо выполнить определенное количество раз.

Синтаксис

Ниже приведен синтаксис цикла for в VBA.

Диаграмма потока

Ниже приведен поток управления в режиме Loop —

  • Первый шаг выполняется. Этот шаг позволяет инициализировать любые переменные управления контурами и увеличивать переменную счетчика шагов.
  • Во-вторых, условие оценивается. Если это правда, выполняется тело цикла. Если оно ложно, тело цикла не выполняется, и поток управления переходит к следующему оператору сразу после цикла For.
  • После выполнения цикла цикла For поток управления переходит к следующему оператору. Этот оператор позволяет вам обновлять любые переменные управления циклом. Он обновляется на основе значения счетчика шагов.
  • Условие теперь оценивается снова. Если это правда, цикл выполняется, и процесс повторяется (тело цикла, затем увеличивают шаг, а затем снова условие). После того, как условие становится ложным, цикл For заканчивается.

пример

Добавьте кнопку и добавьте следующую функцию.

Когда приведенный выше код компилируется и выполняется, он производит следующий результат.

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

for . loop

Для каждого цикла используется для выполнения оператора или группы операторов для каждого элемента в массиве или коллекции.

Читать еще:  Формула подсчета символов в excel

Для каждого цикла аналогичен For Loop; однако цикл выполняется для каждого элемента в массиве или группе. Следовательно, счетчик шагов не будет существовать в этом типе цикла. Он в основном используется с массивами или используется в контексте объектов файловой системы, чтобы работать рекурсивно.

Синтаксис

Ниже приведен синтаксис цикла For Each в VBA.

пример

Когда вышеуказанный код выполняется, он печатает все имена фруктов с одним элементом в каждой строке.

Это выполняется, если в группе есть хотя бы один элемент и повторяется для каждого элемента в группе.

while..wend loop

В цикле While While . Wend , если условие равно True, все операторы выполняются до тех пор, пока не встретится ключевое слово Wend.

Если условие ложно, цикл завершается, и элемент управления переходит к следующему оператору после ключевого слова Wend .

Синтаксис

Ниже приведен синтаксис цикла While..Wend в VBA.

Диаграмма потока

пример

Когда вышеуказанный код выполняется, он выводит следующее в поле сообщения.

Это проверяет условие перед выполнением тела цикла.

Цикл do..while

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

Синтаксис

Ниже приведен синтаксис цикла Do . While в VBA.

Диаграмма потока

пример

В следующем примере используется цикл Do . while для проверки состояния в начале цикла. Операторы внутри цикла выполняются, только если условие становится True.

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

Альтернативный синтаксис

Существует также альтернативный синтаксис для Do . while loop, который проверяет состояние в конце цикла. Основное различие между этими двумя синтаксисами объясняется в следующем примере.

пример

В следующем примере используется цикл Do . while для проверки состояния в конце цикла. Заявления внутри цикла выполняются хотя бы один раз, даже если условие False.

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

Операторы do..While будут выполняться до тех пор, пока условие равно True. (Т. Е.) Петля должна повторяться до тех пор, пока условие не будет False.

do..intil loop

Do . intil цикл не будет использован, когда мы хотим повторить набор операторов, пока условие ложно. Условие может быть проверено в начале цикла или в конце цикла.

Синтаксис

Ниже приведен синтаксис цикла Do..Until в VBA.

Диаграмма потока

пример

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

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

Альтернативный синтаксис

Существует также альтернативный синтаксис Do . До цикла, который проверяет условие в конце цикла. Основное различие между этими двумя синтаксисами объясняется следующим примером.

Диаграмма потока

пример

В следующем примере используется Do . До цикла, чтобы проверить условие в конце цикла. Операторы внутри цикла выполняются хотя бы один раз, даже если условие равно True.

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

Операторы do..Until будут выполняться до тех пор, пока условие False. (Т. Е.) Петля должна повторяться до тех пор, пока условие не будет истинным.

Записи управления циклом

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

Контрольное заявление и описание

Выход для оператора

Выход for используется , когда мы хотим , чтобы выйти из For Loop на основе определенных критериев. Когда Exit For выполняется, управление переходит к следующему оператору сразу после цикла For Loop.

Синтаксис

Ниже приведен синтаксис Exit For Statement в VBA.

Диаграмма потока

пример

В следующем примере используется Exit For . Если значение счетчика достигает 4, цикл For Loop завершается, и управление переходит к следующему утверждению сразу после цикла For Loop.

Когда вышеуказанный код выполняется, он печатает следующий вывод в окне сообщений.

Завершает оператор цикла For и передает выполнение в оператор сразу после цикла

Exit Do

Exit Do Заявление используется , когда мы хотим , чтобы выйти из Do Loops на основе определенных критериев. Он может использоваться как в Do Do . While, так и Do . До циклов.

Когда Exit Do выполняется, управление переходит к следующему оператору сразу после Do Loop.

Синтаксис

Ниже приведен синтаксис выражения Exit Do в VBA.

пример

В следующем примере используется Exit Do . Если значение счетчика достигает 10, выходная линия Do завершается, и управление переходит к следующему оператору сразу после цикла For Loop.

Когда выполняется вышеуказанный код, он печатает следующий вывод в окне сообщения.

Завершает оператор Do While и передает выполнение в оператор сразу после цикла

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×