Пример использования оператора for next. «VBA Операторы цикла. Вложенные циклы. Цикл с отрицательными аргументами

Цикл - это группа операторов, которые многократно выполняются. Для организации циклов в VBA, т. е. многократного выполнения одного или нескольких операторов, можно использовать две основные группы: циклы с перечислением For...Next и циклы с условием Do... Loop. Существуют две разновидности For...Next (For-Next и For Each-Next) и два вида циклов Do...Loop (Do While...Loop и Do Until ...Loop), которые различаются типом проверяемого условия.

Цикл For-Next

Самым распространенным циклом в VBA является цикл с перечислением "For-Next". Этому циклу необходимо задать границы (начальное и конечное значения счетчика) в пределах которых будет изменяться переменная цикла.

Оператор цикла имеет следующий синтаксис:
For For n = 1)
То Конечное Значение (То 10)
Step Приращение (Step 2)

Next [счетчик]

Здесь переменная - это счетчик, значение переменной увеличивается или уменьшается с каждым повторением цикла. Если в конструкции цикла отсутствует Step, то приращение равно 1 (по умолчанию). Для досрочного выхода из оператора цикла, т.е. до достижения счетчиком конечного значения, в конструкцию цикла надо ввести оператор Exit For .

С учетом Exit For оператор цикла имеет следующий синтаксис:
For счетчик = Начальное Значение (например, Например, For n = 1)
То Конечное Значение (То 10)
Step Приращение (Step 2)
[Инструкции] или [блок Операторов]
Exit For
Next [счетчик]

Для обработки группы однородных объектов или массивов применяется следующая конструкция цикла:
For Each Элемент In Группа (имя группы однородных объектов)
[Инструкции] или [блок Операторов]
Exit For
Next элемент

Циклы с условием Do While...Loop и Do Until…Loop

Оператор Do While…Loop выполняет циклы до тех пор, пока соблюдается какое-либо заданное условие. Необходимо отметить, что условие проверяется до того, как выполняется инструкция или группа операторов.

В этом случае синтаксис операторов цикла Do While...Loop имеет следующий вид:
Do While условие (Например, x<20)
[Инструкции] или [блок Операторов]
Exit Do
Loop


Do
[Инструкции] или [блок Операторов]
Exit Do
Loop While условие

Оператор Do Until…Loop выполняет циклы до тех пор, пока условие не соблюдается, а при соблюдении условия оператор выходит из цикла. Условие проверяется до того, как выполняется инструкция или группа операторов.

В этом случае синтаксис операторов цикла Do Until...Loop имеет следующий вид:
Do Until условие (Например, x=20)
[Инструкции] или [блок Операторов]
Exit Do
Loop

Если надо проверять условие после того, как инструкции или блок операторов будут выполнены хотя бы один раз, то можно применить следующую конструкцию оператора цикла:
Do
[Инструкции] или [блок Операторов]
Exit Do
Loop Until условие

Цикл For... Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For... Next.

Цикл For... Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла - счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать .

Синтаксис цикла For... Next

For counter = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ] For счетчик = начало To конец [ Step шаг ] [ операторы ] [ Exit For ] [ операторы ] Next [ счетчик ]

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

Компоненты цикла For... Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next [ counter ] Здесь counter - необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For... Next выполняется с шагом по умолчанию, равному 1 .

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For... Next

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

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

Sub test1() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

Sub test2() Dim i As Long For i = 1 To 10 Step 3 Cells(i, 2) = i Next End Sub

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

Sub test3() Dim i As Long For i = 0 To -9 Step -1 Cells(i + 10, 3) = i + 10 Next End Sub

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:

Sub test4() Dim i As Long For i = 0 To -9 Step -3 Cells(i + 10, 4) = i + 10 Next End Sub

Вложенный цикл

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

Sub test5() Dim i1 As Long, i2 As Long For i1 = 1 To 10 "Пятой ячейке в строке i1 присваиваем 0 Cells(i1, 5) = 0 For i2 = 1 To 4 Cells(i1, 5) = Cells(i1, 5) + Cells(i1, i2) Next Next End Sub

Выход из цикла

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

Sub test6() Dim i As Long For i = 1 To 10 Cells(i, 6) = Choose(i, "Медведь", "Слон", "Жираф", "Антилопа", _ "Крокодил", "Зебра", "Тигр", "Ящерица", "Лев", "Бегемот") Next End Sub

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Sub test7() Dim i As Long For i = 1 To 10 If Cells(i, 6) = "Крокодил" Then Cells(i, 7) = "Он съел галоши" Exit For Else Cells(i, 7) = "Здесь был цикл" End If Next End Sub

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнениев редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For... Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

For i = 1 To 20 Step 2 For i = a To b Step c For i = a - 3 To 2b + 1 Step c/2

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

"Значения атрибутов до округления For i = 1.5 To 10.5 Step 2.51 "Округленные значения атрибутов For i = 2 To 10 Step 3

Старайтесь не допускать попадания в тело цикла For... Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте в коде VBA функцию рабочего листа WorksheetFunction.Round для округления числа перед использованием его в цикле For... Next.

В этом уроке будет рассмотрена работа с циклом For в VBA. Пример работы с циклом For, так же будет продемонстрирован пример создания формул в Excel с помощью макросов.

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

Цикл For имеет следующий синтаксис:
For счетчик = начало цикла To конец цикла [Step шаг ]
группа операторов, команд и т.д.
Exit For
Next счетчик

  • "счетчик" - переменная, которая изменяется на указанный "шаг". Если шаг не указан, то по умолчанию берется единица.
  • "начало цикла" , "конец цикла" - числа или переменные указывающие нижний предел счетчика и верхний. Остановка цикла происходит тогда, когда "счетчик" > "конец цикла" (или, если цикл обратный, т.е. с шагом -1, то "счетчик" < "конец цикла").
  • Exit For – команда принудительной остановки цикла. Применяется в тех случаях, когда произошло некоторое событие, после которого необходимо остановить выполнение команд в цикле, или для предотвращения возникновения ошибки.

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

Пример 1
Даны два столбца С и Е заполненные числами:

Необходимо сложить числа в столбце С с числами столбца Е следующим образом:
С2+Е21, С3+E20, ..., C21+E2. Результат вывести в столбец D в виде формулы т.е. содержание ячейки результата должно быть "=С2+Е21".

Код макроса выглядит следующим образом (куда прописывать код читаем ):

Sub Цикл_For()
"константа указывающая предел цикла т.е. до какого значения циклу бежать
Const n = 21
For i = 2 To n
" создаем строку формулу и сохраняем ее в ячейку
Cells(i, 4) = "=C" & CStr (i) & "+E" & CStr ((n - i) + 2)
" продолжение когда выполняющегося в цикле
Next i
" остальной код программы
End Sub

Разбираем написанный код:

  • Const n = 21 - описание константы n со значением 21, т.е. число строк по которому необходимо пробежаться циклу For ;
  • For i = 2 To n - i счетчик который будет изменяться на 1 с каждым проходом цикла. Счетчик начинается с 2 и заканчивается когда i>n;
  • Cells(i, 4) - ячейка выделенного листа, i номер строки, 4 -номер столбца в который выводится результат. Обратите внимание, наш счетчик i указывает номер строки листа Excel;
  • Next i - оператор закрытия цикла и перевода указателя к For. Все что находится между For и Next выполняется в цикле;
  • CStr - функция преобразующая число в текст.

Ячейке мы присваиваем формулу созданную следующим образом "=C" & CStr (i) & "+E" & CStr ((n - i) + 2). Знак & - "склеивание" символов, строк. В результате у нас получится формула "=Сn+E((n - i) + 2)" где n = 21, i - счетчик.
Страшно? Это только кажется:)

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

Пример 2
Теперь рассмотрим цикл с указанным шагом. После расчета прошлого макроса мы получили три столбца, теперь нам необходимо из столбца E вычесть D, в столбец F вывести формулы вычитания. Код макроса следующий:

Sub Цикл_For_с_шагом()
Const n = 21
For i = n To 2 Step -1
Cells(i, 6) = "=E" & CStr (i) & "-D" & CStr (i)
Next i
End Sub

В данном случае все тоже самое, только цикл теперь "бежит" не от 2, а от 21 до 2 с шагом (Step) -1.
Результат выполнения получим следующий:

Цикл For , в VBA, является не единственным циклом. В дальнейшем будут рассмотрены еще пара вариантов циклов, без которых не обойтись при написании макрокоманд в Excel.

Урок из серии: «Программирование на 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)

Инструкция For … Next позволяет циклически выполнить набор инструкций (операторов) заданное количество раз. Синтаксис инструкции:

For счетчик = нач_значение To конеч_значение

[инструкции ]

[инструкции ]

Next [счетчик ]

Параметр счетчик – это числовая переменная, автоматически изменяющая свое значение на величину шаг после каждого повтора цикла. Цикл выполняется до тех пор, пока счетчик £ конеч_значение при положительном значении параметра шаг или до тех пор, пока счетчик ³ конеч_значение при отрицательном значении параметра шаг . Таким образом, цикл не выполнится ни разу, если при положительном значении шага нач_значение больше, чем конеч_значение . Если параметр Step шаг опущен, то по умолчанию приращение переменной-счетчика полагается равным 1.

Оператор Exit For завершает выполнение цикла "досрочно" и передает управление оператору, следующему за оператором цикла. Exit For обычно располагают в условном операторе, например:

If условие Then Exit For

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

Пример 1

Найти сумму первых 10 натуральных чисел: S = 1 + 2 + 3 + … + 10 . Фрагмент программы:

Dim I as Integer, S as Integer

S = 0 " Обнуляем значение переменной S

For i = 1 to 10 " Начало цикла. Задаем начальное и конечное значения
"параметра цикла. Шаг цикла по умолчанию равен 1.

S = S + i " Оператор присваивания выполняется при каждом
" выполнении цикла, в данном примере 10 раз

Next I " Конец цикла. Значение параметра цикла увеличивается на шаг.

В этом фрагменте программы цикл выполнится ровно 10 раз.

Пример 2

Вывести в 1-й столбец рабочего листа (начиная со2-й строки) значения х в диапазоне от 0 до 3,2 с шагом 0,4.

Public Sub Табуляция()

Dim x As Single, i As Integer

For x = 0 To 3.2 Step 0.4

Хотя длина интервала точно делится на шаг 0.4, результат на рабочем листе имеет вид:

Что же предпринять?

1. Можно слегка увеличить конечное значение, в данном примере вместо 3.2 написать 3.201.

2. Определить число повторений чикла и написать цикл по счетчику целого типа.

В данном случае программа примет вид:

Public Sub Табуляция1()

Dim x As Single, i As Integer, n As Integer

n = CInt((3.2 - 0) / 0.4)

For i = 0 To n Step 1

Cells(i + 2, 1) = x

Оператор цикла For Each … Next

Цикл For Each … Next позволяет повторить выполнение группы инструкций для каждого элемента массива или семейства. Данная инструкция имеет следующий синтаксис:

For Each элемент In группа

[инструкции ]

[инструкции ]

Next [элемент ]

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

Пример 1

Найти среднее арифметическое значение всех элементов выделенного диапазона

Public Function Среднее(Диапазон As Range) As Double

Dim Элемент As Variant

Dim Сумма As Double

Dim Количество As Integer

Количество = 0

For Each Элемент In Диапазон

Сумма = Сумма + Элемент

Количество = Количество + 1

Next Элемент

Среднее = Сумма / Количество

Применение. В выделенном диапазоне смежных ячеек должны находиться числа. Числа в пустых ячейках считаются равными 0. Текст в ячейке приведет к ошибке.

Перечисленные выше операторы If … End If, Select … Case, For … Next, For Each … Next представляют собой группу управляющих инструкций, которые изменяют порядок выполнения команд. Управляющие инструкции могут быть вложены друг в друга в любой последовательности.



Понравилась статья? Поделиться с друзьями: