Циклы VBA.
Цикл – это алгоритмическая структура, при помощи которой реализуется многократное повторение блока операторов.
Оператор цикла со счетчиком (For … Next)
Инструкция For … Next позволяет циклически выполнить набор инструкций (операторов) заданное количество раз. Синтаксис инструкции:
For счетчик = нач_значение To конеч_значение [Step шаг]
[инструкции]
[Exit For]
[инструкции]
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
i = 2
For x = 0 To 3.2 Step 0.4
Cells(i, 1) = x
i = i + 1
Next x
End Sub
Хотя длина интервала [0; 3.2] точно делится на шаг 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
x = 0 + i * 0.4
Cells(i + 2, 1) = x
Next i
End Sub
Оператор цикла For Each … Next
Цикл For Each … Next позволяет повторить выполнение группы инструкций для каждого элемента массива или семейства. Данная инструкция имеет следующий синтаксис:
For Each элемент In группа
[инструкции]
[Exit For]
[инструкции]
Next [элемент]
Параметр элемент – это переменная, которая представляет элемент семейства или массива. Аргумент группа – имя массива или семейства. Инструкции выполняются только один раз для каждого члена группы. Использование инструкции удобно потому, что не требуется заранее знать, сколько элементов содержится в массиве или семействе. Переменная элемент должна иметь тип Variant.
Пример 1
Найти среднее арифметическое значение всех элементов выделенного диапазона
Public Function Среднее(Диапазон As Range) As Double
Dim Элемент As Variant
Dim Сумма As Double
Dim Количество As Integer
Сумма = 0
Количество = 0
For Each Элемент In Диапазон
Сумма = Сумма + Элемент
Количество = Количество + 1
Next Элемент
Среднее = Сумма / Количество
End Function
Применение. В выделенном диапазоне смежных ячеек должны находиться числа. Числа в пустых ячейках считаются равными 0. Текст в ячейке приведет к ошибке.
Перечисленные выше операторы If … End If, Select … Case, For … Next, For Each … Next представляют собой группу управляющих инструкций, которые изменяют порядок выполнения команд. Управляющие инструкции могут быть вложены друг в друга в любой последовательности.