• Vba циклы for next примеры. Циклы VBA (ч.1). Команды организации циклов. Контрольное заявление и описание

    Встречаются ситуации, когда от программы 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 , как показано в следующем простом примере.

    For d = 0 To 10 Step 0.1 dTotal = dTotal + d Next d

    Так как в приведённом выше примере задан шаг приращения равный 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:

    Dim wSheet As Worksheet For Each wSheet in Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

    Оператор прерывания цикла «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))

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

    Цикл - это алгоритмическая структура, при помощи которой реализуется многократное повторение блоков операторов.

    В языке Visual Basic существует три основных вида циклов, которые реализуется при помощи конструкций For:Next, Do:Loop и While:Wend.

    Цикл For:Next. Используется в том случае, когда количество повторов заданного блока операторов известно заранее. Данная конструкция выглядит следующим образом:

    For счетчик = начальное значение To конечное значение Операторы1 Операторы2 Next [счетчик]

    Когда приведенные операторы выполняются первый раз, то переменной счетчику присваивается начальное значение, после чего возможны два варианта действий. Если в результате проверки условия счетчик > конечное значение было получено значение True, то происходит завершение цикла, при этом блоки операторы1 и операторы2 ни разу не выполняются. С другой стороны, если результатом проверки условия является False, то в этом случае блоки операторов выполняются первый раз, после чего происходит переход на начало цикла. Далее значение переменной-счетчика увеличивается на шаг, расположенный после ключевого слова Step (в случае его отсутствия устанавливается шаг = 1). После этого снова проверяется истинность условия счетчик > конечное значение и т.д., окончание цикла происходит в тот момент, когда результатом данной проверки станет значение True.

    Зачастую бывает необходимо "аварийно" завершать работу цикла при выполнении какого-либо дополнительного условия. В этом случае внутри цикла следует использовать служебное словосочетание Exit:For, которое обычно располагают в управляющей конструкции, например:

    If условие Then Exit For

    Если результатом проверки условия будет значение True, то выполнение цикла будет прекращено, причем блок операторы1 будет выполнен очередной раз, а блок операоры2 - нет.

    Цикл Do:Loop. Применяется в том случае, когда число повторений операторов тела цикла заранее неизвестно. Существуют четыре разновидности данной конструкции. При использовании первых двух цикл либо выполнится много раз, либо не выполнится вообще.

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

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

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

    Если условие истинно, то происходит выполнение блока операторы, если же ложно, то есть результатом проверки является False, то цикл не выполниться ни разу.

    В случае использования последних двух конструкций цикл будет выполнен хотя бы один раз.

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

    Блок операторы выполняется до тех пор, пока результатом проверки условия является значение False, иначе выполнение цикла заканчивается.

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

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

    Цикл While:Wend. Также используется в том случае, когда число повторений операторов тела цикла заранее неизвестно, и имеет следующий синтаксис:

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

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

    Инструкция цикла представляет собой указание, из которого ясно, какой набор инструкций (этот набор инструкций называется телом цикла) нужно выполнять многократно и каково правило окончания выполнения цикла.

    7.2.1. Параметрический цикл For… Next

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

    Синтаксис цикла: For ИПЦ=НЗПЦTo КЗПЦ[Step ШИПЦ] Тело цикла (одна или несколько инструкций) Next [ИПЦ]

    Слова For (для), To (до), Step (шаг), Next (затем) являются зарезервированными.

    Применены обозначения:

    ИПЦ – имя параметра цикла (переменная любого числового типа);

    НЗПЦ – начальное значение параметра цикла (выражение любого числового типа), которое параметр цикла будет иметь при первом выполнении тела цикла;

    КЗПЦ – конечное значение параметра цикла (выражение любого числового типа), с которым сравнивается текущее значение параметра цикла;

    ШИПЦ – шаг изменения параметра цикла (выражение любого числового типа) – необязательная часть инструкции цикла.

    Числовые значенияНЗПЦ и КЗПЦ задают интервал, в котором будет изменяться параметр цикла. Необязательный параметр ШИПЦ задает шаг изменения счетчика цикла на каждом проходе. По умолчанию, если он отсут–ствует, то принимается равным 1. Наконец, после инструкций, составляющих тело цикла, следует команда, обозначающая границу действия цикла. В случае вложенных циклов (в тело цикла входит инструкция цикла) полезно указывать, к какому из них относится команда Next . Это достигается добавлением после слова Next имени параметра цикла.

    Процесс выполнения инструкции For Next для положительного шага иллюстрирует рисунок 7.4.

    Рассмотрим примеры.

    В первом примере запишем инструкции для вычисления суммы всех целых нечетных чисел от 1 до 100.

    Dim I As Integer, Сумма As Integer

    For i = 1 To 100 Step 2

    Сумма = Сумма +i

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

    Dim N As Integer

    For N = 100 To 60 Step –10

    Этот код выведет на текущей форме:

    Следующая инструкция заставляет компьютер подавать звуковой сигнал 50 раз. Инструкция For определяет, что параметром цикла является переменная x , ее начальное и конечное значения. Команда Next изменяет счетчик с шагом.

    Dim x As Integer

    Инструкцию For...Next можно завершить досрочно с помощью инструкции Exit For. Выполнение этой инструкции приводит к немедленному выходу из цикла.

    7.2.2. Инструкция цикла Do While...Loop или Do...Loop While

    Здесь While (пока) и Loop (цикл) зарезервированные слова. Циклы типа While предназначены для ситуаций, когда количество повторений тела цикла (итераций) заранее не известно. Вот синтаксис двух разновидностей цикла While :

    Do While УсловиеПовторения Группа инструкций Loop

    Do Группа инструкций Loop While УсловиеПовторения

    Различие между ними заключается в том, что УсловиеПовторения (условие повторения выполнения тела цикла) проверяется в первом случае до выполнения тела цикла (цикл – пока), а во втором случае – после выполнения тела цикла (цикл – до).

    Перейдем к примерам.

    Рассмотрим действие следующего участка программы.

    Счетчик = 0

    Do While Номер > 10

    Номер = Номер - 1

    Счетчик = Счетчик + 1

    MsgBox ("Выполнено " & Счетчик & ­_

    " итераций цикла.")

    При выполнении этого участка программы в окне функции MsgBox будет выведено:

    Выполнено 10 итераций цикла.

    В этой программе условие проверяется до входа в цикл. Если переменной Номер задать значение, равное 9 вместо 20, инструкции внутри цикла выполняться не будут.

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

    Счетчик = 0

    Номер = Номер - 1

    Счетчик = Счетчик + 1

    Loop While Номер > 10

    MsgBox ("В цикле выполнено " & Счетчик & _

    " итераций.")

    Инструкцию Do...Loop можно завершить досрочно с помощью инструкции Exit Do .

    Урок из серии: «Программирование на Visual Basic.NEN для школьников»

    Вы познакомились с элементом управления ComboBox (Комбинированный список).
    На этом занятии мы продолжим изучение операторов языка Visual Basic.Net, остановимся на операторах цикла.
    Циклические алгоритмические структуры бывают трех видов:

    1. циклы со счетчиком, в которых тело цикла выполняется определенное количество раз;
    2. циклы для обработки массивов или коллекций;
    3. циклы по условию, в которых тело цикла выполняется, пока условие истинно (или до тех пор, пока условие не станет истинным).

    На этом уроке рассмотрим оператор цикла со счетчиком (For . . . Next). Напишем проект с использованием этого оператора.

    Цикл со счетчиком For . . . Nex t используется тогда, когда заранее известно, какое число повторений необходимо выполнить.

    Блок-схема

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

    For Счетчик = НачЗнач To КонЗнач Тело цикла Next [Счетчик]

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

    Алгоритм выполнения оператора For . . . Next

    1. Значение переменной Счетчик устанавливается равным НачЗнач.
    2. Проверяется условие Счетчик <= КонЗнач
    3. Если условие выполняется, то выполняется тело цикла. Переменная Счетчик изменяется на величину шага: Счетчик = Счетчик + шаг.
    4. Когда переменная Счетчик достигает величины КонЗнач, происходит выход из цикла и выполняются следующие за ним операторы.

    Преждевременный выход из цикла программист может организовать при помощи конструкции Exit For. При этом происходит автоматический выход из цикла и управление передается следующей за циклом команде.

    Проект «Доход по вкладу»

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

    Технология выполнения

    В этом уроке было показано, как использовать цикл For…Next для повторения кода заданное число раз.

    Оператор цикла for next VBA языка используется для выполнения блока операторов фиксированное количество раз, чаще всего данный цикл применяется при обработке массивов. Цикл for next является в своей сфере самым простым, тут задается начальное и конечное значение, а также, можно задать шаг счетчика.

    Давайте рассмотрим общий синтаксис:

    For счетчик = начало To конец
    Операторы
    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

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

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