Оператор цикла for next VBA языка используется для выполнения блока операторов фиксированное количество раз, чаще всего данный цикл применяется при обработке массивов. Цикл for next является в своей сфере самым простым, тут задается начальное и конечное значение, а также, можно задать шаг счетчика.
Давайте рассмотрим общий синтаксис:
For счетчик = начало To конец [Step шаг]
Операторы
Next счетчик
Счетчик – тут мы указываем имя переменной, которая будет хранить информацию о количестве итераций (количество выполненных походов цикла).
Начало – начальное значение счетчика, является числовым выражением
Конец – конечное значение счетчика, числовое выражение, которое задает количество проходов.
Шаг – необязательный параметр, который позволяет задавать шаг выполнения. Если данный параметр отсутствует, то увеличение счетчика при каждом проходе равно единице. Использование шага актуально в том случае, если нужно методом перебора решить уравнение, так, можно задать начальное значение 1, конечное 3 и шаг в 0,2.
В самом конце цикла можно и не указывать имя переменной (счетчик), но это актуально, если используется вложенный цикл for, это позволит сделать код более читабельным.
Для примера, создайте форму с двумя текстовыми метками и одной кнопкой, в редакторе кода пропишите:
Private Sub CommandButton1_Click() Dim i, j, a, b For i = 1 To 10 Step 2 a = a & i & " " Next i For j = 1 To 10 Step 3 b = b & j & " " Next j Label1.Caption = a Label2.Caption = b End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 14 Label1.ForeColor = vbBlue Label2.Caption = "" Label2.FontSize = 14 Label2.ForeColor = vbRed CommandButton1.Caption = "Значения" End Sub |
В данном примере, у нас есть два параметра цикла VBA, в каждом заданы одинаковые начальные и конечные значения, но, в первом задан шаг 2, а во втором – 3.
В параметре Шаг можно указать и отрицательное значение, в этом случае будет происходить прирост счетчика в обратном порядке, например:
Private Sub CommandButton1_Click() Dim i, j, SummA, SummB For i = 1 To 10 SummA = SummA + i Next For j = 10 To 1 Step -1 SummB = SummB + j Next Label1.Caption = "Прямой порядок: " & SummA Label2.Caption = "Обратный порядок: " & SummB End Sub |
Тут мы вычисляем сумму чисел от 1 до 10 при прямом и обратном порядке.
Довольно часто при использовании оператора цикла for next VBA языка может возникнуть ситуация, когда при заданном условии надо прекратить перебор данных, в этом случае используется выражение Exit For, например:
Private Sub CommandButton1_Click() Dim i, j, SummA, SummB For i = 1 To 100 For j = 1 To 100 SummA = SummA + i Next j Next i For i = 1 To 100 For j = 1 To 100 SummB = SummB + i If SummB > 10000 Then Exit For Next j Next i Label1.Caption = "Сумма без условия: " & SummA Label2.Caption = "Сумма с условием: " & SummB End Sub |
В данном примере используется вложенный цикл VBA for next. В первом случае происходит суммирование чисел от 1 до 100, при этом суммирование повторяется 100 раз. Во втором случае мы прописали условие с помощью условного оператора if – если сумма больше 10 тысяч, то произвести выход из цикла.
Хорошо, теперь попробуем написать более практичный пример – решение квадратного уравнения методом перебора:
Private Sub CommandButton1_Click() Const a = -2, b = 6, c = 20 Dim x, result, res For x = -10 To 10 Step 0.5 result = a * (x * x) + b * x + c If result = 0 Then res = res & " " & x End If Next x Label1.Caption = "х ровно : " & res End Sub |
В данном примере мы объявили три константы a, b и с, со значениями -2, 6 и 20, это параметры квадратного уравнения (a*x*x + b*x + c = 0). В цикле происходит изменение переменной х в диапазоне от -10 до 10 с шагом в 0,5. При каждой итерации происходит проверка условия на равенство нулю, если условие выполняется, в переменную res записывается значение переменной x. В итоге, уравнение будет иметь два решения: -2 и 5.
И так, в этой статье мы рассмотрели цикл for next языка VBA, который применяется для обработки заданного количества раз одних и тех же действий, в следующей статье мы рассмотрим цикл for each, который используется для обработки коллекций, там же мы рассмотрим и сами коллекции.