Меню Рубрики

Как написать цикл в vba

Циклы 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


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии