Все циклы vba

Повторение с помощью циклов

Циклы

Последнее обновление: 30.10.2015

Еще одним видом управляющих конструкций являются циклы. В VB.NET используется несколько видов циклов.

  • For…Next

  • For Each…Next

  • While

  • Do

Цикл For…Next

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

For i As Integer = 1 To 9
    Console.WriteLine("Квадрат числа {0} равен {1}", i, i * i)
Next

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

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

For i As Integer = 1 To -9 Step -1
    For j As Integer = 1 To 9
        Console.WriteLine("Произведение чисел i и j равно {0}", i * j)
        j += 1
    Next
Next

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

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

Цикл For Each…Next

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

'Создаем массив из пяти чисел
Dim nums(4) As Integer
Dim r As New Random()
'инициализируем массив
For i As Integer = 0 To nums.Length - 1
    nums(i) = r.Next(100)
Next
'Выводим элементы массива
For Each i As Integer In nums
    Console.Write("{0} ", i)
Next

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

Цикл While

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

Dim j As Integer = 10
While j > 0
    Console.WriteLine(j)
    j -= 1
End While

Цикл Do

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

Dim j As Integer = 10
Do While j > 0
    Console.WriteLine(j)
    j -= 1
Loop

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

Dim j As Integer = 10
Do Until j < 0
    Console.WriteLine(j)
    j -= 1
Loop

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

Dim j As Integer = -1
Do
    Console.WriteLine(j)
     j -= 1
Loop Until j < 0
'либо
Do
    Console.WriteLine(j)
    j -= 1
Loop While j > 0		

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

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

Dim r As New Random()
Dim num As Integer = r.Next(100)

For i As Integer = 0 To 100
    num -= 1
    If num < 50 Then Exit For
Next
Console.WriteLine(num)

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

Dim r As New Random()
Dim num As Integer = r.Next(100)

For i As Integer = 0 To 10
    num -= 7
    If num < 50 AndAlso num > 25 Then
        Continue For
    End If

    Console.WriteLine(num)
Next

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

НазадВперед

While Wend

Этот цикл в VBA, чтобы сделать его совместимым со старым кодом. Microsoft рекомендует использовать циклы Do, поскольку они более структурированы.

Из MSDN: «Оператор Do… Loop обеспечивает более структурированный и гибкий способ выполнения циклов».

Формат цикла VBA While Wend

Цикл VBA While имеет следующий формат:

While <Условие>Wend

While Wend против Do

Разница между циклами VBA While и VBA Do заключается в следующем:

  1. While может иметь условие только в начале цикла.
  2. While не имеет версии Until.
  3. Не существует оператора для выхода из цикла While, как Exit For или Exit Do.

Условие для цикла VBA While такое же, как и для цикла VBA Do While. Два цикла в приведенном ниже коде работают точно так же.

Sub GetInput()

    Dim sCommand As String

    Do While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 1")
    Loop

    While sCommand <> "н"
        sCommand = InputBox("Пожалуйста, введите элемент для цикла 2")
    Wend

End Sub

VBA цикл For Each … Next

Цикл For Each … Next имеет следующий цикл:

123 For Each элемент_группы In группа_элементов
‘Какое-то действиеNext элемент_группы

Здесь переменная элемент_группы принадлежит к группе_элементов (железная логика!!!). Я имею в виду, что объект группа_элементов должен быть коллекцией объектов. Вы не сможете запустить цикл For Each для отдельно объекта (Microsoft сразу оповестит вас об этом 438-й ошибкой).

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

Ниже представлен пример, как можно воспользоваться циклом For Each для просмотра всех листов книги:

12345 Sub пример_цикла4()For Each sht In ActiveWorkbook.Worksheets
MsgBox sht.NameNext shtEnd Sub

… либо всех сводных таблиц на листе

12345 Sub пример_цикла()For Each pvt In ActiveSheet.PivotTables
MsgBox pvt.NameNext pvtEnd Sub

Прерывание  цикла VBA

Если вам необходимо выйти из цикла до момента, как будет достигнуто условие завершения цикла, воспользуйтесь командой End Forв связке с инструкцией IF. В примере, приведенном ниже, мы выйдем из цикла до момента достижения условия завершения, в данном цикле выход будет осуществлен при условии, когда переменная счетчик будет равна 3.

123456 Sub пример_цикла5()For счетчик  = 0 To 5
MsgBox счетчикIf (счетчик = 3) Then Exit ForNext счетчикEnd Sub

Пропуск части цикла в For Each

Пропускать часть цикла, а затем возвращаться назад – плохая практика. Тем не менее, давайте рассмотрим пример:

123456789101112 Sub пример_цикла6 ()Dim j As IntegerFor i = 0 To 5
b:If (j = 3) Then GoTo a:
j = iNext i
a:
j = 4GoTo b:
MsgBox («Значение  j = » &amp; j)End Sub

Здесь мы пропустили одну итерацию (когда j = 3). Как вы думаете, какой результат выдаст программа? 3? 5? Ну… на самом деле, ни один из вариантов не верный. Цикл будет выполняться бесконечно, пока память компьютера не переполнится.

Однако возможность пропустить шаг цикла без последствий существует. Вы можете увеличить значение счетчика на 1 (или другое значение), что приведет к пропуску операций, находящихся между этими значениями. Вот пример:

123456 Sub пример_цикла7()For i = 0 To 5
i = i + 1
MsgBox iNext iEnd Sub

Но опять же, это плохая практика написания кода, и может привести к нежелательным последствиям при написании кода в будущем. Вместо этого, при необходимости пропуска некоторых итераций, попробуйте использовать функцию If или Select Case.

The Next Loop: циклы через набор чисел

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

Основная операция цикла For Next такая же, как и для цикла
For Each. Разница заключается в формате строки For.

Шаг 1 — Объявление переменной для числа

Чтобы перебрать набор чисел, мы сначала должны объявить переменную для целого числа типа данных. Мы можем использовать Integer или Long integer.

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

Дополнительное примечание к Long: тип данных Long (целое число) содержит большее число, чем Integer. Это занимает больше памяти, но для современного компьютера это не проблема. Мы можем использовать длинные переменные все время. Буква L выглядит как цифра 1 в VBA, поэтому я теперь использую i в качестве имени переменной, хотя я использую Long в качестве типа данных. Это все зависит от личных предпочтений, и вы можете назвать переменную как хотите.

Шаг 2 — Напишите строку For

Далее мы пишем строку For. Базовая конструкция — это ключевое слово For, за которым следует имя переменной (counter), затем знак равенства, начальное значение To end value.

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

Эта строка кода возвращает количество листов в активной книге. Тем не менее, он не проходит по каждому листу. Цикл просто перебирает набор чисел. Мы должны создать ссылку на лист с переменной счетчика (i) в качестве номера индекса свойства Worksheets. Шаг 3 показывает эту ссылку.

Шаг 3 — Добавить код, который повторяется для каждой итерации

Остальная часть цикла работает так же, как цикл For Each. Мы можем добавить строки между строками For и Next, которые будут выполняться для каждой итерации цикла. Переменная counter может быть использована несколько раз в этих строках кода.

Шаг 4 — Строка Next закрывает цикл

Наконец, мы добавляем строку Next внизу.

Когда макрос запускается, он устанавливает переменную, равную первому числу в строке For. Когда макрос попадает в следующую строку, он добавляет 1 к значению переменной или увеличивает счет. Итак, я = 2 во второй итерации цикла. Он продолжает цикл, пока не будет достигнут последний номер в цикле.

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

Если вы хотите заштриховать все остальные строки на листе, вы можете использовать такой цикл.

WHILE

Приведем пример пустого цикла While:

Sub while_loop() While ‘Инструкции WendEnd Sub

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

Ниже есть повторяющийся макрос, который был рассмотрен сначала, преобразован в While цикл:

Sub while_loop () Dim num As Integer num = 1 ‘Начальное число (в данном случае, это номер строки и значение, которое проставляется) While num

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

Примеры макросов VBA для циклов

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

Макрос метрики SUBTOTAL — создание сводной таблицы всех
типов функций

Как добавить оглавление Галерея изображений в файлы Excel

Скрыть и отобразить (отфильтровать) столбцы с помощью
слайсера или раскрывающегося меню фильтра

Как изменить размер панелей Excel для разных размеров экрана

Макрос VBA, чтобы скрыть все столбцы, которые содержат
значение в ячейке

Как повторять задачи с помощью кода VBA — Looping — Отличная статья с большим количеством примеров от моего друга Криса Ньюмана из The Spreadsheet Guru.

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

Цикл
— это группа операторов, которые многократно выполняются. Для организации циклов в 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
или 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, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать .

Бесконечный цикл

Даже если вы никогда не писали код в своей жизни, я уверен, что вы слышали фразу «Бесконечный цикл». Это цикл, в котором условие никогда не будет выполнено. Обычно это происходит, когда вы забыли обновить счетчик.

Следующий код показывает бесконечный цикл

Dim cnt As Long
    cnt = 1

    'это бесконечный цикл
    Do While cnt <> 5

    Loop

В этом примере cnt установлен в 1, но он никогда не обновляется. Поэтому условие никогда не будет выполнено — cnt всегда будет меньше 5.

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

Dim cnt As Long
    cnt = 1

    Do While cnt <> 5
        cnt = cnt + 1
    Loop

Как вы можете видеть, использование For Loop безопаснее для подсчета, поскольку оно автоматически обновляет счет в цикле. Ниже приведен тот же цикл с использованием For.

Dim i As Long
    For i = 1 To 4

    Next i

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

Конечно, можно использовать бесконечный цикл, используя For — это потребует немного больше усилий

 Dim i As Long
    ' Бесконечный цикл
    For i = 1 To 4
        ' i никогда не достигнет 4
        i = 1
    Next i

Работа с бесконечным циклом

Когда у вас бесконечный цикл — VBA не выдаст ошибку. Ваш код будет продолжать работать, а редактор Visual Basic не будет отвечать.

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

Вы также можете выйти из цикла, убив процесс. Нажмите Ctrl + Shift + Esc. На вкладке Процессы найдите Excel / Microsoft Excel. Щелкните правой кнопкой мыши по этому и выберите «Завершить процесс». Это закроет Excel, и вы можете потерять часть работы — так что гораздо лучше использовать Ctrl + Break или его эквивалент.

КомпонентыParts

ЧастьPart ОписаниеDescription
Требуется в инструкции.Required in the statement. Числовая переменная.Numeric variable. Управляющая переменная для цикла.The control variable for the loop. Дополнительные сведения см. в подразделе далее в этой статье.For more information, see later in this topic.
Необязательный элемент.Optional. Тип данных .Data type of . Дополнительные сведения см. в подразделе далее в этой статье.For more information, see later in this topic.
Обязательный.Required. Числовое выражение.Numeric expression. Начальное значение .The initial value of .
Обязательный.Required. Числовое выражение.Numeric expression. Конечное значение .The final value of .
Необязательный элемент.Optional. Числовое выражение.Numeric expression. Величина, на которую увеличивается каждый раз с помощью цикла.The amount by which is incremented each time through the loop.
Необязательный элемент.Optional. Одна или несколько инструкций между и выполняются указанное число раз.One or more statements between and that run the specified number of times.
Необязательный элемент.Optional. Передает управление в следующую итерацию цикла.Transfers control to the next loop iteration.
Необязательный элемент.Optional. Передает управление за пределы цикла.Transfers control out of the loop.
Обязательный.Required. Завершает определение цикла.Terminates the definition of the loop.

Примечание

Ключевое слово используется в этом операторе для указания диапазона счетчика.The keyword is used in this statement to specify the range for the counter. Это ключевое слово также можно использовать в SELECT… Оператор Case и в объявлениях массивов.You can also use this keyword in the Select…Case Statement and in array declarations. Дополнительные сведения об объявлениях массивов см. в разделе оператор Dim.For more information about array declarations, see Dim Statement.

Циклы Do While. Loop и Do Until. Loop

Выполнение инструкций в цикле Do While. Loop продолжается до тех пор, пока логическое выражение истинно. Формат цикла:

Последовательность работы цикла Do While. Loop :

  1. Переменной-счетчику присваивается начальное значение.
  2. Проверяется условие, если оно истинно, выполняются инструкции внутри цикла, иначе выполнение цикла завершается.
  3. Переменная-счетчик изменяется на величину, указанную в параметре .
  4. Переход к пункту 2.

Выведем все числа от 1 до 100, используя цикл Do While. Loop (листинг 4.7).

Листинг 4.7. Вывод чисел от 1 до 100

Выполнение инструкций в цикле Do Until. Loop продолжается до тех пор, пока логическое выражение ложно. Формат цикла:

Выведем все числа от 100 до 1, используя цикл Do Until. Loop (листинг 4.8).

Листинг 4.8. Вывод чисел от 100 до 1

С помощью циклов Do While. Loop и Do Until. Loop можно создать бесконечный цикл, указав в параметре значение True или False соответственно. Выведем все числа от 1 до 100, используя бесконечный цикл (листинг 4.9).

Листинг 4.9. Вывод чисел от 1 до 100

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

Циклы VBA: for, while и другие

Доброго времени суток! Данную статью я решил посвятить рубрике по основам программирования в Visual Basic for Application. И сегодня мы поговорим о циклах в VBA, разберём их синтаксис и рассмотрим несколько примеров, которые часто встречаются программисту.

Сначала напомню, что цикл — процесс повторения части кода, выполняемый, пока не будет выполнено или нарушено заданное нами условие.

В данной статье мы разберём синтаксис и примеры следующих циклов в VBA:

Цикл For в VBA

  • Цикл for в VBA обычно используется при зацикливании фрагмента кода, если нам известно конечное значение counter — счетчика, при котором мы выйдем из цикла. Возьмём для примера самый распространённый пример:
  • Сгенерировать массив из 5 целых значений

Dim mas(5) As Integer
For i% = 0 To 4 mas(i) = Int((10 * Rnd) + 1)
Next i

Обратите ваше внимание, что в этом примере используется неявное объявление при работе с циклами в VBA. i% — означает неявное объявление переменной i в формате integer

Такая конструкция по сути заменяет следующую: dim i as integer. Это используется для сокращения кода и для удобства написания и чтения. В старых версиях VBA необходимо указывать знак формата после каждого использования неявной переменной. В более поздних версиях достаточно всего один раз.

VBA для цикла for даёт возможность использовать функцию Step. Как ясно из перевода, это шаг, с которым мы будем проходить наш интервал. По умолчанию, он равен 1. Популярный вариант использования встречается в случаях, когда counter связан с переменной, используемой внутри цикла. Например, при написании программ, связанных с функциями.

Найти пересечение графика функции y = 5*x + 5 с осью ординат

Function expr(x As Integer) As Integer expr = 5 * x + 5
End Function
Sub CodeTown() Dim i As Integer For i = -10 To 10 Step 1 If expr(i) = 0 Then MsgBox «При Y = 0, Х = «+ CStr(i) Next i
End Sub

Function expr(x As Integer) As Integer expr = 5 * x + 5
End Function
Sub CodeTown() Dim i As Integer For i = -10 To 10 Step 1 If expr(i) = 0 Then MsgBox «При Y = 0, Х = «+ CStr(i) Exit For End If Next i
End Sub

C помощью команды Exit можно закончить выполнение любого цикла в VBA. Достаточно указать после Exit название используемого цикла. Также им возможно завершить работу любой процедуры или функции.

Цикл For Each в VBA

For Each в VBA основан на переборе всех элементов, указанного типа в массиве, объекте или группе. Самый популярный вариант его использования — перебор страниц в рабочей книге.

Вывести названия всех листов в рабочей книге

For Each ws In ThisWorkbook.Worksheets MsgBox ws.Name
Next ws

  1. И ещё один интересный пример:
  2. Изменить размер шрифта и выравнить по центру текст в label

For Each element In UserForm1.Controls If InStr(1, UserForm1.Controls.Item(i%).Name, «Label») > 0 Then UserForm1.Controls.Item(i%).TextAlign = fmTextAlignCenter UserForm1.Controls.Item(i%).Font.Size = 20 i% = i% + 1 End If
Next element

Тут следует понимать, что через Controls можно обратиться к любому элементу формы. Если отфильтровать по имени, например, как мы сделали выше, то можно выделить группы элементов и изменить их свойства. В данном случае, размер шрифта и выравнивание.

Цикл While в VBA

Циклы в VBA, которые используют структуру Do..Loop (это while и until циклы) можно записывать с разным расположением фрагмента условия. Как видите на картинке выше, условие может проверяться после выполнения одной итерации, а может перед запуском цикла. Самый популярный пример:

Отсортируйте по возрастанию сгенерированный массив методом пузырька

Dim mas(5) As Integer
For i% = 0 To 4 mas(i%) = Int((10 * Rnd) + 1)
Next i
Dim count As Integer, temp As Integer
count = 1
Do While count > 0 count = 0 For i% = 0 To 3 If mas(i) > mas(i + 1) Then temp = mas(i) mas(i) = mas(i + 1) mas(i + 1) = temp count = count + 1 End If Next i%
Loop

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

Цикл Until в VBA

Как видите, отличия от while крайне несущественные. Цикл Until в VBA можно реализовать с помощью конструкции while NOT (condition). Тем не менее, приведу пример:

Заставить пользователя ввести число

Dim temp As Variant
Do temp = InputBox(«Введите число»)
Loop Until IsNumeric(temp)

Почему заставить? Потому, что если пользователь закроет окно ввода, это его не спасёт, оно будет появляться вновь и вновь пока он не введёт любое число.

На этом мы закончим. Сегодня мы рассмотрели важную тему циклов в VBA, разобрали основные примеры. Конечно все примеры по этой обширной теме сложно разобрать, но, тем не менее, основы вы должны понять. Оставляйте ваши комментарии, если у вас возникли вопросы. Скачать исходник

Оператор GoTo

С помощью оператора безусловного перехода GoTo можно передать управление в любое место программы. Оператор имеет следующий формат:

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

Статьи по Visual Basic for Applications (VBA)

Помощь сайту

ПАО Сбербанк: Счет: 40817810855006152256 Реквизиты банка: Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК Корреспондентский счет: 30101810500000000653 БИК: 044030653 КПП: 784243001 ОКПО: 09171401 ОКОНХ: 96130 Скриншот реквизитов

Понравилась статья? Поделиться с друзьями:
Самоучитель Брин Гвелл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: