Remkomplekty.ru

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

Excel do while

Программирование циклов, цикл 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 (ч.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, будет выглядеть так:

Читать еще:  Объекты vba excel

Для тестирования условий после выполнения тела цикла надо поместить логическое выражение в конец блока операторов, составляющих тело цикла, после ключевого слова 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 (и не только в БЕЙСИКе) существуют циклы с условием — условные циклы.

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

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

Читать еще:  Excel vba random

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 (ч.2). Циклы тестирующие условия до и после выполнения тела цикла

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

Цикл Do .. While

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

Читать еще:  Autofill vba excel

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, будет выглядеть так:

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

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

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

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