Циклы VBA
Доброго времени суток! Данную статью я решил посвятить рубрике по основам программирования в Visual Basic for Application. И сегодня мы поговорим о циклах в VBA, разберём их синтаксис и рассмотрим несколько примеров, которые часто встречаются программисту.
Сначала напомню, что цикл — процесс повторения части кода, выполняемый, пока не будет выполнено или нарушено заданное нами условие.
В данной статье мы разберём синтаксис и примеры следующих циклов в VBA:
- For
- For each
- While
- Until
Цикл For в VBA
Цикл for в VBA обычно используется при зацикливании фрагмента кода, если нам известно конечное значение counter — счетчика, при котором мы выйдем из цикла.
Возьмём для примера самый распространённый пример:
Сгенерировать массив из 5 целых значений
Обратите ваше внимание, что в этом примере используется неявное объявление при работе с циклами в VBA. i% — означает неявное объявление переменной i в формате integer. Такая конструкция по сути заменяет следующую: dim i as integer . Это используется для сокращения кода и для удобства написания и чтения. В старых версиях VBA необходимо указывать знак формата после каждого использования неявной переменной. В более поздних версиях достаточно всего один раз.
VBA для цикла for даёт возможность использовать функцию Step. Как ясно из перевода, это шаг, с которым мы будем проходить наш интервал. По умолчанию, он равен 1. Популярный вариант использования встречается в случаях, когда counter связан с переменной, используемой внутри цикла. Например, при написании программ, связанных с функциями.
Найти пересечение графика функции y = 5*x + 5 с осью ординат
Теперь представим, что у нас достаточно большой диапазон и мы не хотим заставлять компьютер считать лишние итерации. На этот случай существует команда Exit For. Перепишем наш последний пример с новой командой.
C помощью команды Exit можно закончить выполнение любого цикла в VBA. Достаточно указать после Exit название используемого цикла. Также им возможно завершить работу любой процедуры или функции.
Цикл For Each в VBA
For Each в VBA основан на переборе всех элементов, указанного типа в массиве, объекте или группе.
Самый популярный вариант его использования — перебор страниц в рабочей книге.
Вывести названия всех листов в рабочей книге
И ещё один интересный пример:
Изменить размер шрифта и выравнить по центру текст в label
Тут следует понимать, что через Controls можно обратиться к любому элементу формы. Если отфильтровать по имени, например, как мы сделали выше, то можно выделить группы элементов и изменить их свойства. В данном случае, размер шрифта и выравнивание.
Цикл While в VBA
Циклы в VBA, которые используют структуру Do..Loop (это while и until циклы) можно записывать с разным расположением фрагмента условия. Как видите на картинке выше, условие может проверяться после выполнения одной итерации, а может перед запуском цикла.
Самый популярный пример:
Отсортируйте по возрастанию сгенерированный массив методом пузырька
В вышеуказанном примере мы отсортировали массив с рандомными значениями в порядке возрастания. Метод пузырька считается достаточно долгим, но простым в реализации. В основном, им сортируют небольшие числовые массивы.
Цикл Until в VBA
Как видите, отличия от while крайне несущественные. Цикл Until в VBA можно реализовать с помощью конструкции while NOT (condition). Тем не менее, приведу пример:
Заставить пользователя ввести число
Почему заставить? Потому, что если пользователь закроет окно ввода, это его не спасёт, оно будет появляться вновь и вновь пока он не введёт любое число.
На этом мы закончим. Сегодня мы рассмотрели важную тему циклов в VBA, разобрали основные примеры. Конечно все примеры по этой обширной теме сложно разобрать, но, тем не менее, основы вы должны понять. Оставляйте ваши комментарии, если у вас возникли вопросы.
Скачать исходник
Источник статьи: http://codetown.ru/vba/cikly/
Циклы в 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
Источник статьи: http://office-guru.ru/excel/cikly-v-vba-463.html
Программирование циклов в VBA
Цикл – это оператор или группа операторов, которые программа многократно выполняет до тех пор, пока не получит команду начать выполнение чего – либо другого. В Visual Basic существуют два основных типа циклов – циклы со счетчиком (с известным числом повторений) и циклы с условием. Циклы со счетчиком используют в тех случаях, когда необходимо выполнить некоторые действия определенное число раз. Циклы с условием применяются тогда, когда некоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие или до тех пор, пока не будет выполнено определенное условие.
Циклы со счетчиком
Циклы со счетчиком (с известным числом повторений) в Visual Basic еще называют циклами For, или циклами For . Next. Так они называются потому, что начало и конец этих циклов определяются операторами For и Next. Синтаксис цикла For. . .Next таков:
Fo r СчетчикЦикла= НачальноеЗначение To КонечноеЗначение [ Step Шаг ]Блок операторов
[ Exit For ]
где
For — ключевое слово Visual Basic, обозначающее начало цикла;
СчетчикЦикла — переменная, определенная в качестве счетчика цикла;
НачальноеЗначение — число, задающее начальное значение счетчика;
То — ключевое слово Visual Basic, разделяющее НачальноеЗначение и КонечноеЗначение — число, задающее значение счетчика, при котором цикл завершается;
Step — ключевое слово Visual Basic, используемое для задания шага цикла, необязательный аргумент;
Шаг — число, задающее шаг цикла, т.е. значение на которое увеличивается (или уменьшается) значение счетчика на каждом шаге, это число может быть отрицательным;
Exit Fo r – оператор досрочного выхода из цикла (необязательный);
Next — ключевое слово Visual Basic, обозначающее конец цикла.
В начале цикла For . Next определяется переменная-счетчик, а так же начальное и конечное значения этой переменной. В самом начале выполнения цикла переменная — счетчик устанавливается в начальное значение. Каждый раз, когда программа пройдя через цикл, возвращается к его началу, значение счетчика увеличивается. Если используется ключевое слово Step , то переменная- счетчик изменяется в соответствии с числом, указанным после ключевого слова Step . Например:
For I = 0 То 10 Step 2 ‘ Значение I будет увеличиваться на 2
Если ключевое слово Step отсутствует, то значение шага равно единице.
Каждый раз, когда значение переменной-счетчика изменяется, оно сравнивается с заданным конечным значением счетчика. Если значение счетчика превышает конечное значение, программа сразу выходит из цикла и переходит к той строке кода, которая следует за циклом.
Option Explicit
Dim I As Integer
For I = 1 To 4
Sum =Sum + 2
Next I
Этот цикл эквивалентен написанию четырех операторов Sum =Sum + 2 в тексте программы.
Цикл For . . . Next Может быть прерван досрочно, например, при достижении какого — либо условия. Для этого в нужном месте цикла нужно поместить оператор Exit For. Например:
Option Explicit
Dim Sum As Integer
Dim j As Integer
Sum = 2
For j = 1 To 10
Sum = Sum + j
If Sum > 6 Then
Exit For ‘ Выход из цикла, если значение Sum больше 6
End If
Next j
TextBox1.Text = Sum
В этом примере цикл прерывается досрочно, когда значение переменной Sum будет больше 6. В результате выполнения этого кода в текстовом поле будет выведено вычисленное значение переменной Sum равное 8.
Циклы с условием
Главной особенностью циклов с условием является условие, которое может быть любым выражением, принимающим значение True (Истина) или False (Ложно). В Visual Basic есть два основных цикла с условием — цикл Do While … Loop и цикл Do Until … Loop. Оба они могут быть с предусловием или с постусловием.
Циклы Do While | Until имеет следующий синтаксис:
где
Do — ключевое слово;
While | Until — ключевые слова, указывающие тип цикла;
Выражение — выражение условия, принимающее значение True или False;
Loop — ключевое слово, указывающее на окончание цикла.
Цикл Do While выполняется до тех пор, пока выражение условия имеет значение True.
Пример цикла Do While, реализующего алгоритм программы, аналогичный приведенной в примере для цикла For с досрочным прерыванием:
Option Explicit
Dim Sum As Integer
Dim j As Integer
Sum = 2
Do While Sum
В результате выполнения этого кода в текстовом поле будет выведено вычисленное значение переменной Sum равное 8.
В отличие от цикла Do While цикл Do Until выполняется до тех пор, пока выражение условия имеет значение False.
Пример цикла Do Until, реализующего алгоритм программы аналогичный приведенному выше:
Option Explicit
Dim Sum As Integer
Dim j As Integer
Sum = 2
Do Until Sum >7
Sum = Sum + j
j = j + 1
Loop
TextBox1.Text = Sum
В результате выполнения этого примера в текстовом поле будет выведено вычисленное значение переменной Sum равное 8.
Иногда бывает необходимо прервать цикл Do … Loop, если выполняется какое-либо дополнительное условие. Это может быть сделано с помощью оператора Exit Do. Например:
Option Explicit
Dim Sum As Integer
Dim j As Integer
Sum = 2
Do Until Sum > 7
Sum = Sum + j
j = j + 1
If j > 3 Then
Exit Do ‘ Досрочный выход из цикла Do … Loop
End If
Loop
TextBox1.Text = Sum
В этом примере цикл с условием досрочно прерывается, если выполняется дополнительное условие j > 3. В результате выполнения программного кода переменная Sum будет иметь значение, равное 8.
Используя цикл с условием можно организовать бесконечный цикл. Иногда это бывает необходимо, а иногда это происходит из-за ошибки пользователя. Для создания бесконечного цикла условное выражение должно быть таким, которое никогда не выполняется или выполняется всегда. Например:
Выйти из такого бесконечного цикла и прервать работу программы можно нажав комбинацию клавиш .
Источник статьи: http://zen.yandex.ru/media/id/5d4d8e658da1ce00ad5ece61/programmirovanie-ciklov-v-vba-5dd27473dc9fec67cf66295c