Урок 9 по VBA - Цикл for next. Visual basic циклы
Циклы VBA: for, while и другие
Доброго времени суток! Данную статью я решил посвятить рубрике по основам программирования в Visual Basic for Application. И сегодня мы поговорим о циклах в VBA, разберём их синтаксис и рассмотрим несколько примеров, которые часто встречаются программисту.
Сначала напомню, что цикл — процесс повторения части кода, выполняемый, пока не будет выполнено или нарушено заданное нами условие.
В данной статье мы разберём синтаксис и примеры следующих циклов в VBA:
Цикл For в VBA
Цикл for в VBA обычно используется при зацикливании фрагмента кода, если нам известно конечное значение counter — счетчика, при котором мы выйдем из цикла.Возьмём для примера самый распространённый пример:
Сгенерировать массив из 5 целых значений
Dim mas(5) As Integer For i% = 0 To 4 mas(i) = Int((10 * Rnd) + 1) Next iОбратите ваше внимание, что в этом примере используется неявное объявление при работе с циклами в VBA. i% — означает неявное объявление переменной i в формате integer. Такая конструкция по сути заменяет следующую: dim i as integer. Это используется для сокращения кода и для удобства написания и чтения. В старых версиях VBA необходимо указывать знак формата после каждого использования неявной переменной. В более поздних версиях достаточно всего один раз.
VBA для цикла for даёт возможность использовать функцию Step. Как ясно из перевода, это шаг, с которым мы будем проходить наш интервал. По умолчанию, он равен 1. Популярный вариант использования встречается в случаях, когда counter связан с переменной, используемой внутри цикла. Например, при написании программ, связанных с функциями.
Найти пересечение графика функции y = 5*x + 5 с осью ординат
Function expr(x As Integer) As Integer expr = 5 * x + 5 End Function Sub CodeTown() Dim i As Integer For i = -10 To 10 Step 1 If expr(i) = 0 Then MsgBox "При Y = 0, Х = "+ CStr(i) Next i End SubТеперь представим, что у нас достаточно большой диапазон и мы не хотим заставлять компьютер считать лишние итерации. На этот случай существует команда Exit For. Перепишем наш последний пример с новой командой.
Function expr(x As Integer) As Integer expr = 5 * x + 5 End Function Sub CodeTown() Dim i As Integer For i = -10 To 10 Step 1 If expr(i) = 0 Then MsgBox "При Y = 0, Х = "+ CStr(i) Exit For End If Next i End SubЦикл For Each в VBA
For Each в VBA основан на переборе всех элементов, указанного типа в массиве, объекте или группе.Самый популярный вариант его использования — перебор страниц в рабочей книге.
Вывести названия всех листов в рабочей книге
For Each ws In ThisWorkbook.Worksheets MsgBox ws.Name Next wsИ ещё один интересный пример:
Изменить размер шрифта и выравнить по центру текст в label
For Each element In UserForm1.Controls If InStr(1, UserForm1.Controls.Item(i%).Name, "Label") > 0 Then UserForm1.Controls.Item(i%).TextAlign = fmTextAlignCenter UserForm1.Controls.Item(i%).Font.Size = 20 i% = i% + 1 End If Next elementТут следует понимать, что через Controls можно обратиться к любому элементу формы. Если отфильтровать по имени, например, как мы сделали выше, то можно выделить группы элементов и изменить их свойства. В данном случае, размер шрифта и выравнивание.
Цикл While в VBA
Циклы в VBA, которые используют структуру Do..Loop (это while и until циклы) можно записывать с разным расположением фрагмента условия. Как видите на картинке выше, условие может проверяться после выполнения одной итерации, а может перед запуском цикла.Самый популярный пример:
Отсортируйте по возрастанию сгенерированный массив методом пузырька
Dim mas(5) As Integer For i% = 0 To 4 mas(i%) = Int((10 * Rnd) + 1) Next i Dim count As Integer, temp As Integer count = 1 Do While count > 0 count = 0 For i% = 0 To 3 If mas(i) > mas(i + 1) Then temp = mas(i) mas(i) = mas(i + 1) mas(i + 1) = temp count = count + 1 End If Next i% LoopВ вышеуказанном примере мы отсортировали массив с рандомными значениями в порядке возрастания. Метод пузырька считается достаточно долгим, но простым в реализации. В основном, им сортируют небольшие числовые массивы.
Цикл Until в VBA
Как видите, отличия от while крайне несущественные. Цикл Until в VBA можно реализовать с помощью конструкции while NOT (condition). Тем не менее, приведу пример:
Заставить пользователя ввести число
Почему заставить? Потому, что если пользователь закроет окно ввода, это его не спасёт, оно будет появляться вновь и вновь пока он не введёт любое число.
На этом мы закончим. Сегодня мы рассмотрели важную тему циклов в VBA, разобрали основные примеры. Конечно все примеры по этой обширной теме сложно разобрать, но, тем не менее, основы вы должны понять. Оставляйте ваши комментарии, если у вас возникли вопросы.Скачать исходник
Поделиться ссылкой:
Похожее
codetown.ru
Циклы в Visual Basic.NET
Циклы
Последнее обновление: 30.10.2015
Еще одним видом управляющих конструкций являются циклы. В VB.NET используется несколько видов циклов.
For...Next
For Each...Next
While
Do
Цикл For...Next
В этом цикл выполняется определенное число раз, причем это число задается счетчиком:
For i As Integer = 1 To 9 Console.WriteLine("Квадрат числа {0} равен {1}", i, i * i) NextПри работе с циклами мы можем увеличивать значение счетчика при каждом проходе не только на единицу, но и вообще на любое число. Для этого нужно либо использовать ключевое слово Step и после него указать шаг цикла, на который будет увеличиваться значение счетчика, либо можно увеличивать счетчик непосредственно в цикле:
For i As Integer = 1 To -9 Step -1 For j As Integer = 1 To 9 Console.WriteLine("Произведение чисел i и j равно {0}", i * j) j += 1 Next NextОбратите внимание, что в качестве шага в первом цикле выбрано отрицательное значение и значение счетчика с каждым проходом уменьшается на единицу. Во внутреннем цикле счетчик j при каждом проходе увеличивается на 2, так как он по умолчанию увеличивается на единицу, и еще мы явным образом увеличиваем его в цикле на единицу. В итоге внутренний цикл отрабатывает пять раз, а внешний девять, то есть фактически получается 45 циклов.
Цикл For Each...Next
Цикл For Each осуществляет перебор элементов в определенной группе, например, в массиве или в коллекции. Предположим у нас есть некоторый массив типа Integer и нам надо инициализировать этот массив случайными значениями и затем вывести все его элементы на экран:
'Создаем массив из пяти чисел Dim nums(4) As Integer Dim r As New Random() 'инициализируем массив For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next 'Выводим элементы массива For Each i As Integer In nums Console.Write("{0} ", i) NextВ выражении For Each мы сначала указываем переменную, которая будет принимать значения элементов массива. А после ключевого слова In указываем группу, в которой надо перебрать все элементы.
Цикл While
В цикл While выполняется до тех пор, пока соблюдается определенное условие, указанное после слова While:
Dim j As Integer = 10 While j > 0 Console.WriteLine(j) j -= 1 End WhileЦикл Do
Цикл Do, также как и цикл While, выполняется, пока соблюдается определенное условие. Однако он имеет разные формы. Так, в следующем примере сначала проверяется условие, а затем выполняется блок кода, определенный в цикле:
В данном случае цикл выполняется, пока значение j больше нуля. Но есть еще одна запись, где вместо слова While используется слово Until, а цикл выполняется пока не соблюдено определенное условие, то есть пока значение j не станет меньше нуля:
Dim j As Integer = 10 Do Until j < 0 Console.WriteLine(j) j -= 1 LoopЕсли изначально условие, заданное в цикле, неверно, то цикл не будет работать. Но мы можем определить проверку в конце цикла, и таким образом, наш цикл как минимум один раз отработает:
Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 Loop Until j < 0 'либо Do Console.WriteLine(j) j -= 1 Loop While j > 0Операторы Continue и Exit
Нередко возникает необходимость не дожидаться окончания цикла, а сразу же выйти из цикла, в случае соблюдения определенного условия. Для этого используют оператор Exit, после которого указывают тип цикла, из которого осуществляется выход, например, Exit Do (Exit While):
Существует и другая задача - осуществить выход не из цикла, а из текущего прохода или итерации и перейти к следующему. Для этого используют оператор Continue, после которого указывают тип цикла, из которого осуществляется выход, например, Continue While:
Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 10 num -= 7 If num < 50 AndAlso num > 25 Then Continue For End If Console.WriteLine(num) NextВ данном случае мы в каждом проходе цикла вычитаем из num число 7 и затем смотрим, не принадлежит ли число num интервалу от 25 до 50. И если принадлежит, переходим к новой итерации цикла, а если нет, то выводим его на экран.
Циклы в VBA - Microsoft Excel для начинающих
Встречаются ситуации, когда от программы VBA требуется совершить несколько раз подряд один и тот же набор действий (то есть повторить несколько раз один и тот же блок кода). Это может быть сделано при помощи циклов VBA.
К циклам VBA относятся:
Далее мы подробно рассмотрим каждый из этих циклов.
Оператор цикла «For» в Visual Basic
Структура оператора цикла For в Visual Basic может быть организована в одной из двух форм: как цикл For … Next или как цикл For Each.
Цикл «For … Next»
Цикл For … Next использует переменную, которая последовательно принимает значения из заданного диапазона. С каждой сменой значения переменной выполняются действия, заключённые в теле цикла. Это легко понять из простого примера:
For i = 1 To 10 Total = Total + iArray(i) Next iВ этом простом цикле 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 можно использовать отрицательную величину, например, вот так:
For i = 10 To 1 Step -1 iArray(i) = i Next iЗдесь шаг приращения равен -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. Если совпадение найдено, то цикл прерывается:
For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next iЦикл «Do While» в Visual Basic
Цикл Do While выполняет блок кода до тех пор, пока выполняется заданное условие. Далее приведён пример процедуры Sub, в которой при помощи цикла Do While выводятся последовательно числа Фибоначчи не превышающие 1000:
'Процедура Sub выводит числа Фибоначчи, не превышающие 1000 Sub Fibonacci() Dim i As Integer 'счётчик для обозначения позиции элемента в последовательности Dim iFib As Integer 'хранит текущее значение последовательности Dim iFib_Next As Integer 'хранит следующее значение последовательности Dim iStep As Integer 'хранит размер следующего приращения 'инициализируем переменные i и iFib_Next i = 1 iFib_Next = 0 'цикл Do While будет выполняться до тех пор, пока значение 'текущего числа Фибоначчи не превысит 1000 Do While iFib_Next < 1000 If i = 1 Then 'особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else 'сохраняем размер следующего приращения перед тем, как перезаписать 'текущее значение последовательности iStep = iFib iFib = iFib_Next End If 'выводим текущее число Фибоначчи в столбце A активного рабочего листа 'в строке с индексом i Cells(i, 1).Value = iFib 'вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End SubВ приведённом примере условие iFib_Next < 1000 проверяется в начале цикла. Поэтому если бы первое значение iFib_Next было бы больше 1000, то цикл бы не выполнялся ни разу.
Другой способ реализовать цикл Do While – поместить условие не в начале, а в конце цикла. В этом случае цикл будет выполнен хотя бы раз, не зависимо от того, выполняется ли условие.
Схематично такой цикл Do While с проверяемым условием в конце будет выглядеть вот так:
Do ... Loop While iFib_Next < 1000Цикл «Do Until» в Visual Basic
Цикл Do Until очень похож на цикл Do While: блок кода в теле цикла выполняется раз за разом до тех пор, пока заданное условие выполняется (результат условного выражения равен True). В следующей процедуре Sub при помощи цикла Do Until извлекаются значения из всех ячеек столбца A рабочего листа до тех пор, пока в столбце не встретится пустая ячейка:
iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Значение текущей ячейки сохраняется в массиве dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 LoopВ приведённом выше примере условие IsEmpty(Cells(iRow, 1)) находится в начале конструкции Do Until, следовательно цикл будет выполнен хотя бы один раз, если первая взятая ячейка не пуста.
Однако, как было показано в примерах цикла Do While, в некоторых ситуациях нужно, чтобы цикл был выполнен хотя бы один раз, не зависимо от первоначального результата условного выражения. В таком случае условное выражение нужно поместить в конце цикла, вот так:
Do ... Loop Until IsEmpty(Cells(iRow, 1))Оцените качество статьи. Нам важно ваше мнение:
office-guru.ru
Visual Basic 6.0. Основные навыки - Глава 5
5. ЦИКЛЫ
Одно из преимуществ программирования на компьютере – возможность многократного использования некоторого набора написанных ранее инструкций. Специальные команды, которые располагаются в начале и в конце набора инструкций и обеспечивают их повторное выполнение, называются циклами, а многократно повторяющийся набор инструкции – тело цикла.
В Visual Basic существуют два основных типа циклов – циклы со счетчиком и циклы с условием. Циклы со счетчиком используют, когда необходимо выполнить тело цикла определенное количество раз, а циклы с условием – повторение в зависимости от некоторого постороннего условия.
Циклы со счетчиком еще называют циклами «For», по имени оператора, с помощью которого он формируется:
For CounterVar = StartNum To EndNum [Step StepNum]
Statements
Next [CounterVar]
· For – ключевое слово Visual Basic, обозначающее начало цикла.
· CounterVar – определенная пользователем переменная счетчика цикла.
· StartNum – начальное значение счетчика.
· To – ключевое слово Visual Basic, разделяющее «StartNum» и «EndNum».
· EndNum – значение счетчика, после которого цикл завершается.
· Step – ключевое слово, используемое при указании шага цикла. Необязательный аргумент.
· StepNum – значение шага цикла, т.е. значение, на которое увеличивается значение счетчика на каждом шаге. Это число может быть отрицательным.
· Statements – любая группа операторов, выполняемая на каждом шаге цикла.
· Next [CounterVar] – оператор, обозначающий конец цикла «For». Указывать в нем переменную счетчика не обязательно, хотя рекомендуется.
Значения «StartNum», «EndNum», «StepNum» могут быть переменными или константами любого числового типа. Переменная «CounterVar» также может быть любого числового типа. Ее можно использовать для расчетов внутри тела цикла в качестве полноценной переменной. Это особенно полезно для работы с массивами, но в этом случае счетчик должен быть любого целого типа.
Примечания: | 1. Если начальное значение счетчика будет меньше конечного при положительном шаге и, наоборот, будет меньше при отрицательном шаге, то тело цикла ни разу не выполнится. 2. При отсутствии параметра «StepNum» шаг всегда принимается равным 1. |
Циклы «For» очень удобно использовать при работе с массивами. Например, для заполнения массива случайными числами от 0 до 100, можно воспользоваться следующим синтаксисом:
Dim Mas(1 To 1000) As Integer
…
For i = 1 To 1000
Mas(i) = Int(Rnd(1) * 101)
Next i
Примечание | Описание работы применяемых функций приведено в «Приложении». |
Циклом с условием является цикл «Do…Loop». Такие циклы также называют циклами с неизвестным числом повторений или итерационными. Он продолжает свою работу в зависимости от состояния условия. Главной особенностью таких циклов является наличие условия, т.е. любого логического выражения, функции или переменной, принимающих значения True или False. Двумя основными циклами с условиями являются: цикл «Do…While», который выполняется до тех пор, пока условие сохраняет значение True, и цикл «Do…Until», работающий, пока условие не станет равным True.
Для вышеописанных циклов различают циклы с пост- и предусловием. Различаются они тем, где именно в цикле записывается условие, при этом принцип работы циклов не меняется. Синтаксис циклов приведен в табл. 9.
Таблица 9
Синтаксис итерационных циклов
| Do…While | Do…Until |
С предусловием | Do While Condition statements Loop | Do Until Condition statements Loop |
С постусловием | Do statements Loop While Condition | Do statements Loop Until Condition |
- Statements – группа операторов, выполняемая на каждом шаге цикла.
- Condition – соответствующее условие.
Примечание | Единственным отличием циклов с пред- и постусловием является то, что в первом случае тело цикла может не выполнить ни одного раза, а во втором случае тело цикла всегда выполнится хотя бы один раз. |
Циклы с условием можно применять при работе с текстовыми файлами. В этом случае информация будет считываться до тех пор, пока не будет достигнут конец файла (синтаксис см. раздел «Сохранение и считывание информации»).
Иногда возникает необходимость досрочного прерывания цикла. Для этого в необходимом месте тела цикла записывают оператор «Exit For» или «Exit Do» в зависимости от вида прерываемого цикла. Как только компьютер встречает этот оператор, то цикл прерывается и управление передается оператору следующим за оператором «Next» или «Loop».
В некоторых случаях важно повторить подзадачу несколько раз внутри более общей задачи. Один из способов написания такой программы – включить в цикл набор инструкций (внутренний цикл), которые повторяются внутри другого цикла (внешний цикл). Такая структура, состоящая из цикла в цикле, называется вложенными циклами. Любой цикл может быть вложен в любой другой независимо от их видов. Например, можно вложить цикл «For» в любой цикл «Do…Loop» и наоборот:
Do While condition
For CounterVar = StartNum To EndNum
…
Next CounterVar
Loop
Контрольные вопросы для самопроверки
- Что такое «цикл»? Какие циклы вы знаете?
- Какова классификация циклов и области использования?
- Что такое «тело цикла»?
- Какие циклы называются «итерационными»?
- Как сформировать цикл «For»? Как он работает?
- Как сформировать цикл «Do»? Как он работает?
- Чем отличаются циклы с пред- и постусловиями?
- Чем отличаются циклы «While» и «Until»? Являются ли они взаимозаменяемыми?
- Как предотвратить бесконечный цикл?
- Что такое «вложенный цикл»? Приведите примеры.
dit.isuct.ru
Циклы в Visual Basic Если
Циклы в Visual Basic
• Если известно, какое число повторений данной группы операторов необходимо выполнить, можно воспользоваться циклической конструкцией For…Next. For Cчетчик=Начальное значение To Конечное значение [Step шаг] Операторы блока S Next [счетчик]
Вычисление степени числа два • Использовать при вычислении можно только действие умножение. • Для вычислений организуем цикл For…Next. Будем умножать на 2 накопленное произведение (n-1) раз: • For i = 1 To n - 1 • Two = 2 * Two • Next i • Two – это накопленное произведение, которое после завершения цикла и будет являться искомым значением, i – переменная цикла.
Условные циклы • Часто бывает так, что необходимо повторить операторы, выражающие совокупность действий, какое-то число раз, но сколько будет повторений заранее не известно. В жизни такого рода ситуации встречаются довольно часто. Например, вам необходимо дойти до двери комнаты, в которой вы находитесь, повторяя действие “сделай один шаг”. Сколько повторений вам придется сделать, заранее вы не знаете. Вы делаете повторения, пока не упретесь в дверь. В таких случаях количество повторений зависит от некоторого условия. • Условие выхода из цикла можно поставить в начале цикла, перед повторяющимися действиями. Такой цикл называется циклом с предусловием. Условие выхода из цикла можно поставить в конце цикла, после повторяющихся операторов. Такой цикл называется циклом с послеусловием
• Оператор цикла WHILE. . . WEND используется для организации циклов с предусловием и имеет следующий формат: • While Wend • Операторы, перечисленные в цикле, выполняются до гех пор, пока выполняется заданное условие продолжения цикла. При этом условие проверяется перед выполнением цикла, следовательно, цикл может не выполнятьcя ни разу, если условие нарушается в самом начале.
Оператор цикла DO. . . LOOP используется для орга-шзации циклов с неопределенным числом повторений с предусловием и с постусловием). Этот оператор для организации цикла с предусловием может использоваться в двух модификациях: а) Do While Loop б) Do Until Loop Операторы, перечисленные в цикле, выполняются до тех пор, пока выполняется заданное условие продолжения цикла, если задано предложение While, или до тех ор, пока нарушается условие прекращения цикла
• Для организации цикла с постусловием оператор Do Loop также может быть использован в двух модификациях: • в) Do • • • Loop While • г) Do • • Loop Until • Условие выполнения или прекращения цикла здесь проверяется в конце. Поэтому этот цикл обязательно выполняется хотя бы один раз.
Вычисление факториала натурального числа • Известно, что факториал натурального числа можно вычислить последовательным перемножением всех натуральных чисел, начиная с единицы до данного натурального числа: • N!=1 * 2 * 3 *…* (N - 1) * N • Сделайте небольшой проект с использованием цикла For…Next, в котором после задания пользователем значения натурального N будет рассчитываться значение N! Результат вычислений должен распечатываться на форме.
• № 7, 8, 12 • Домашнее задание: выучить форму записи циклических операторов, подготовится к практической работе.
present5.com
Урок 9 по VBA - Цикл for next
Оператор цикла for next VBA языка используется для выполнения блока операторов фиксированное количество раз, чаще всего данный цикл применяется при обработке массивов. Цикл for next является в своей сфере самым простым, тут задается начальное и конечное значение, а также, можно задать шаг счетчика.
Давайте рассмотрим общий синтаксис:
For счетчик = начало To конец [Step шаг]ОператорыNext счетчик
Счетчик – тут мы указываем имя переменной, которая будет хранить информацию о количестве итераций (количество выполненных походов цикла).
Начало – начальное значение счетчика, является числовым выражением
Конец – конечное значение счетчика, числовое выражение, которое задает количество проходов.
Шаг – необязательный параметр, который позволяет задавать шаг выполнения. Если данный параметр отсутствует, то увеличение счетчика при каждом проходе равно единице. Использование шага актуально в том случае, если нужно методом перебора решить уравнение, так, можно задать начальное значение 1, конечное 3 и шаг в 0,2.
В самом конце цикла можно и не указывать имя переменной (счетчик), но это актуально, если используется вложенный цикл for, это позволит сделать код более читабельным.
Для примера, создайте форму с двумя текстовыми метками и одной кнопкой, в редакторе кода пропишите:
Private Sub CommandButton1_Click() Dim i, j, a, b For i = 1 To 10 Step 2 a = a & i & " " Next i For j = 1 To 10 Step 3 b = b & j & " " Next j Label1.Caption = a Label2.Caption = b End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 14 Label1.ForeColor = vbBlue Label2.Caption = "" Label2.FontSize = 14 Label2.ForeColor = vbRed CommandButton1.Caption = "Значения" End Sub |
В данном примере, у нас есть два параметра цикла VBA, в каждом заданы одинаковые начальные и конечные значения, но, в первом задан шаг 2, а во втором – 3.
В параметре Шаг можно указать и отрицательное значение, в этом случае будет происходить прирост счетчика в обратном порядке, например:
Private Sub CommandButton1_Click() Dim i, j, SummA, SummB For i = 1 To 10 SummA = SummA + i Next For j = 10 To 1 Step -1 SummB = SummB + j Next Label1.Caption = "Прямой порядок: " & SummA Label2.Caption = "Обратный порядок: " & SummB End Sub |
Тут мы вычисляем сумму чисел от 1 до 10 при прямом и обратном порядке.
Довольно часто при использовании оператора цикла for next VBA языка может возникнуть ситуация, когда при заданном условии надо прекратить перебор данных, в этом случае используется выражение Exit For, например:
Private Sub CommandButton1_Click() Dim i, j, SummA, SummB For i = 1 To 100 For j = 1 To 100 SummA = SummA + i Next j Next i For i = 1 To 100 For j = 1 To 100 SummB = SummB + i If SummB > 10000 Then Exit For Next j Next i Label1.Caption = "Сумма без условия: " & SummA Label2.Caption = "Сумма с условием: " & SummB End Sub |
В данном примере используется вложенный цикл VBA for next. В первом случае происходит суммирование чисел от 1 до 100, при этом суммирование повторяется 100 раз. Во втором случае мы прописали условие с помощью условного оператора if – если сумма больше 10 тысяч, то произвести выход из цикла.
Хорошо, теперь попробуем написать более практичный пример – решение квадратного уравнения методом перебора:
Private Sub CommandButton1_Click() Const a = -2, b = 6, c = 20 Dim x, result, res For x = -10 To 10 Step 0.5 result = a * (x * x) + b * x + c If result = 0 Then res = res & " " & x End If Next x Label1.Caption = "х ровно : " & res End Sub |
В данном примере мы объявили три константы a, b и с, со значениями -2, 6 и 20, это параметры квадратного уравнения (a*x*x + b*x + c = 0). В цикле происходит изменение переменной х в диапазоне от -10 до 10 с шагом в 0,5. При каждой итерации происходит проверка условия на равенство нулю, если условие выполняется, в переменную res записывается значение переменной x. В итоге, уравнение будет иметь два решения: -2 и 5.
И так, в этой статье мы рассмотрели цикл for next языка VBA, который применяется для обработки заданного количества раз одних и тех же действий, в следующей статье мы рассмотрим цикл for each, который используется для обработки коллекций, там же мы рассмотрим и сами коллекции.
scriptcoding.ru
Циклы в Visual Basic. Если известно, какое число
Циклы в Visual Basic
Если известно, какое число повторений данной группы операторов необходимо выполнить, можно воспользоваться циклической конструкцией For…Next. For Cчетчик=Начальное значение To Конечное значение [Step шаг] Операторы блока S Next [счетчик]
Вычисление степени числа два Использовать при вычислении можно только действие умножение. Для вычислений организуем цикл For…Next. Будем умножать на 2 накопленное произведение (n-1) раз: For i = 1 To n - 1 Two = 2 * Two Next i Two – это накопленное произведение, которое после завершения цикла и будет являться искомым значением, i – переменная цикла.
Условные циклы Часто бывает так, что необходимо повторить операторы, выражающие совокупность действий, какое-то число раз, но сколько будет повторений заранее не известно. В жизни такого рода ситуации встречаются довольно часто. Например, вам необходимо дойти до двери комнаты, в которой вы находитесь, повторяя действие “сделай один шаг”. Сколько повторений вам придется сделать, заранее вы не знаете. Вы делаете повторения, пока не упретесь в дверь. В таких случаях количество повторений зависит от некоторого условия. Условие выхода из цикла можно поставить в начале цикла, перед повторяющимися действиями. Такой цикл называется циклом с предусловием. Условие выхода из цикла можно поставить в конце цикла, после повторяющихся операторов. Такой цикл называется циклом с послеусловием
Оператор цикла WHILE...WEND используется для организации циклов с предусловием и имеет следующий формат: While Wend Операторы, перечисленные в цикле, выполняются до гех пор, пока выполняется заданное условие продолжения цикла. При этом условие проверяется перед выполнением цикла, следовательно, цикл может не выполнятьcя ни разу, если условие нарушается в самом начале.
Оператор цикла DO...LOOP используется для орга-шзации циклов с неопределенным числом повторений с предусловием и с постусловием). Этот оператор для организации цикла с предусловием может использоваться в двух модификациях: а) Do While Loop б) Do Until Loop Операторы, перечисленные в цикле, выполняются до тех пор, пока выполняется заданное условие продолжения цикла, если задано предложение While, или до тех ор, пока нарушается условие прекращения цикла
Для организации цикла с постусловием оператор Do Loop также может быть использован в двух модификациях: в) Do • Loop While г) Do Loop Until Условие выполнения или прекращения цикла здесь проверяется в конце. Поэтому этот цикл обязательно выполняется хотя бы один раз.
Вычисление факториала натурального числа Известно, что факториал натурального числа можно вычислить последовательным перемножением всех натуральных чисел, начиная с единицы до данного натурального числа: N!=1 * 2 * 3 *…* (N - 1) * N Сделайте небольшой проект с использованием цикла For…Next, в котором после задания пользователем значения натурального N будет рассчитываться значение N! Результат вычислений должен распечатываться на форме.
№7,8, 12 Домашнее задание: выучить форму записи циклических операторов, подготовится к практической работе.
present5.com