Как сделать цикл в vba

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Циклы позволяют выполнить одну или несколько строк кода несколько раз. VBA поддерживает следующие циклы:

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

Параметры counter (счетчик), start (начало цикла), end (конец цикла) и increment (приращение) являются числовыми.

Примечание. Параметр increment может быть как положительным, так и отрицательным. Если он положителен, параметр start должен быть меньше или равен параметру end, иначе цикл не будет выполняться. Если параметр increment отрицателен, то параметр start должен быть больше или равен значению параметра end, чтобы выполнялось тело цикла. Если параметр Step не задан, то значение параметра increment по умолчанию равно 1.

2. Сравнивает значение переменной цикла counter и значение параметра end. Если переменная counter больше, VBA завершает выполнение цикла. (Если значение параметра increment отрицательно, то VBA прекращает выполнение цикла при условии, что значение переменной цикла counter меньше значения параметра end.)

4. Увеличивает значение переменной цикла counter на 1 или на величину значения параметра increment, если он задан.

Цикл For Each . . . Next похож на цикл For . . . Next, но он повторяет группу операторов для каждого элемента из набора объектов или из массива, вместо повторения операторов заданное число раз. Он особенно полезен, когда неизвестно, сколько элементов содержится в наборе.

Для наборов параметр element может быть только переменной типа variant, общей переменной типа object или объектом, перечисленным в Object Browser

Нельзя использовать цикл For Each . . . Next с массивом, имеющим определенный пользователем тип, так как переменная типа variant не может содержать значение определенного пользователем типа

Цикл Do применяется для выполнения блока операторов неограниченное число раз. Существует несколько разновидностей конструкции Do . . . Loop, но каждая из них вычисляет выражение-условие, чтобы определить момент выхода из цикла. Как и в случае конструкции If . . . Then условие должно быть величиной или выражением, принимающими значение False (нуль) или True (не нуль).

В следующей конструкции Do . . . Loop операторы выполняются до тех пор, пока значением условия является True (Истина):

Выполняя этот цикл, VBA сначала проверяет условие. Если условие ложно (False), он пропускает все операторы цикла. Если оно истинно (True), VBA выполняет операторы цикла, снова возвращается к оператору Do While и снова проверяет условие.

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

Другая разновидность конструкции Do . . . Loop сначала выполняет операторы тела цикла, а затем проверяет условие после каждого выполнения. Эта разновидность гарантирует, что операторы тела цикла выполнятся по крайней мере один раз:

Две другие разновидности конструкции цикла аналогичны предыдущим, за исключением того, что цикл выполняется, пока условие ложно (False):

Создадим самый простой цикл используя VBA в Excel.

В этот раз напишем всё своими руками:

Расшифрую, приведённый выше код VBA:

  • Весь код макроса заключается между Sub и End Sub, после Sub пишется название макроса.
  • Текст после ‘ означает комментарий
  • Цикл заключается между For … to и Next
  • i - в моём случае переменная, Вы можете выбрать любую другую, в том числе поддерживаются и русские обозначения (например: For переменная=1 To 10 …)
  • Cells(строка, столбец) – ячейка в которую хотим что-то записать или из которой хотим извлечь информацию, в нашем случае столбец мы указали константу (1 и 2), а строку сделали переменной (i+1).
  • Range(“b1”) возвращает значение ячейки “B1”

А ещё, можно сразу дописать минимакрос по очистке диапазона от значений

Комментарии: 1

Добрый день. Подскажите, пожалуйста, каким образом, эти действия повторить несколько раз, предположим через пять строк? Спасибо.

VB-циклы в Visual Basic for Application выполняют те же функции, что и в любом другом языке программирования. Цикл — это возможность повторять выполнение какой-либо части кода, пока не выполнится заданное условие.

Если в других языках программирования с цикличностью немного сложно, так как там может быть большая разновидность циклов, то в Visual Basic существует всего два вида подобных минискриптов:

  • циклы со счетчиком — подобные циклы выполняются нужное количество раз;
  • циклы с условиями — подобные минискрипты выполняются до того времени, пока не будет выполнено какое-либо обозначенное требование.

VB-циклы: циклы со счетчиком

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

Например:
For i = 0 To 9
Result = Result + iArrays(i)
Next i

Например:
For s = 0 To 9 Step 0.5
sResult = sResult + s
Next s

В этом случае наша переменная будет брать величины по следующему сценарию: 0, 0.5, 1, 1.5, 2, 2.5 и т. д. до 9.

В данном случае переменная будет принимать значения по следующему принципу: 9, 8, 7, 6 и т. д. до 0.

Что являют собой циклы в Visual Basic?

Данный цикл чем-то похож на предыдущий, но он не просто перебирает величины из обозначенной области, а еще выполняет какие-то манипуляции с обозначенными значениями. Допустим, нам надо вывести наименования всего количества страничек в нашей рабочей книжонке:
For Each ws In MyWorkbook.Workpages
MsgBox ws.Titles
Next ws

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

Например:
For x = 0 To 100000
If sValues(x) = sVal Then
IndexVal = x
Exit For
End If
Next x

VB-циклы: циклы с условием

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

Простой пример:
Dim x As Integer = 99
Do While x > 1
Console.WriteLine(x)
x -= 2
Loop

Например:
Dim x As Integer = 99
Do Until x

Заключение

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

Цикл For. Next

В этом цикл выполняется определенное число раз, причем это число задается счетчиком:

Здесь переменная i выполняет роль счетчика. После слова To мы помещаем максимальное значение счетчика. При каждом цикле значение счетчика увеличивается на единицу. И это значение сравнивается со значением после To. Если эти два значения равны, то цикла прекращает свою работу.

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

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

Цикл For Each. Next

Цикл For Each осуществляет перебор элементов в определенной группе, например, в массиве или в коллекции. Предположим у нас есть некоторый массив типа Integer и нам надо инициализировать этот массив случайными значениями и затем вывести все его элементы на экран:

В выражении For Each мы сначала указываем переменную, которая будет принимать значения элементов массива. А после ключевого слова In указываем группу, в которой надо перебрать все элементы.

Цикл While

В цикл While выполняется до тех пор, пока соблюдается определенное условие, указанное после слова While:

Цикл Do

Цикл Do, также как и цикл While, выполняется, пока соблюдается определенное условие. Однако он имеет разные формы. Так, в следующем примере сначала проверяется условие, а затем выполняется блок кода, определенный в цикле:

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

Если изначально условие, заданное в цикле, неверно, то цикл не будет работать. Но мы можем определить проверку в конце цикла, и таким образом, наш цикл как минимум один раз отработает:

Операторы Continue и Exit

Нередко возникает необходимость не дожидаться окончания цикла, а сразу же выйти из цикла, в случае соблюдения определенного условия. Для этого используют оператор Exit, после которого указывают тип цикла, из которого осуществляется выход, например, Exit Do (Exit While) :

Существует и другая задача - осуществить выход не из цикла, а из текущего прохода или итерации и перейти к следующему. Для этого используют оператор Continue , после которого указывают тип цикла, из которого осуществляется выход, например, Continue While :

В данном случае мы в каждом проходе цикла вычитаем из num число 7 и затем смотрим, не принадлежит ли число num интервалу от 25 до 50. И если принадлежит, переходим к новой итерации цикла, а если нет, то выводим его на экран.

Читайте также: