For Next VBA

Оператор For…Next в VBA. Урок №29

Оператор For Next относится к операторам циклов. С его помощью, блок операторов может выполняться определённое количество раз. Это количество повторений указывается до начала выполнения цикла.

Синтаксис For … Next в VBA

For счётчик = начало To конец [Step шаг]
(блок операторов, которые должны выполняться при каждом проходе цикла)
Next счётчик

Здесь,

  • счётчик (счётчик цикла) – это любая числовая переменная, которая хранит в себе количество выполненных проходов цикла.
  • начало – это числовое выражение, которое задаёт начальное значение счётчика для определения количества проходов цикла.
  • конец – числовое выражение, которое задаёт конечное значение счётчика для определения количества проходов цикла.
  • шаг – числовое выражение, которое хранит в себе число, на которое будет увеличиваться счётчик при каждом проходе цикла.

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

Давайте напишем первый пример программы с циклом For … Next и разберём пошагово её выполнение.

Пример For … Next

Sub myCode()
    Dim myNum As String
    For a = 1 To 12
        myNum = myNum & a & Chr(13)
    Next a
    
    MsgBox "Выводим последовательность чисел от 1 до 12:" & Chr(13) & myNum
End Sub

Результат

for next vba

В данном примере:

  1. Первая строка Sub myCode() – это название нашей процедуры (программы).
  2. Вторая строка Dim myNum As String – объявление строковой переменной myNum.
  3. Третья строка For a = 1 To 12 – начало нашего цикла. Здесь выражение a = 1 является счётчиком. А 12 – это конец цикла.
  4. Четвёртая строка – это операторы, которые нужно будет выполнять при каждом проходе по циклу.
  5. Пятая строка Next a – говорит о том, что управление должно быть возвращено в начало цикла. Выполнение программы продолжается со сравнения текущего значения переменной a (это значение уже равно 2, а не 1) со значением параметра конец (который, я напомню, равен 12). И так будет происходить до тех пор, пока значение переменной a не станет больше 12. Когда a будет больше 12, программа продолжит своё выполнение с оператора, который следует за оператором Next. То есть будет выведено сообщение MsgBox.
  6. Шестая строка End Sub – конец нашей процедуры (программы).

Примечание.

Наверняка, вам стало очень интересно, зачем я использовал Chr(13) при выводе сообщения. Дело в том, что Chr(13) – это символ возврата каретки при выводе которого курсор перемещается к левому краю поля. То есть, простыми словами – это перенос строки.

Давайте рассмотрим ещё один пример использования цикла For … Next в котором мы выведем в сообщение только нечётные цифры.

Пример цикла For … Next с элементом Step

Sub myCode()
    Dim myNum As String
    For a = 1 To 12 Step 2
        myNum = myNum & a & Chr(13)
    Next a
    
    MsgBox "Выводим последовательность чисел от 1 до 12:" & Chr(13) & myNum
End Sub

Результат

цикл for next vba

В данном примере, мы добавили шаг равный 2. То есть при проходе цикла, переменная a увеличивается на 2 и таким образом мы получаем вывод в сообщении только нечётных цифр: 1, 3, 5, 7, 9, 11.

Цикл For … Next с дробным значением приращения счётчика

Числовое значение после ключевого слова Step может быть как целым, так и дробным. Но если, вы решили использовать дробное число для приращения шага цикла, то переменная счётчика тоже должна иметь тип числа с плавающей точкой.

Пример

Sub myCode()
    Dim myNum As String
    Dim a As Single
    b = 0
    For a = 1.609344 To 10 Step 1.609344
        b = b + 1
        myNum = myNum & b & " km" & " = " & a & " миль" & Chr(13)
    Next a
    
    MsgBox "Переводим километры в мили:" & Chr(13) & myNum
End Sub

Результат

цикл vba

Цикл For … Next с убывающим значением счётчика

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

Пример

Sub myCode()
    Dim myNum As String
    For a = 1 To -10 Step -1
        myNum = myNum & a & Chr(13)
    Next a
    
    MsgBox "Это последовательность цифр с отрицательным шагом:" & Chr(13) & myNum
End Sub

Результат

циклы в vba

Помните.

При уменьшении счётчика, цикл For … Next будет выполняться до тех пор, пока значение счётчика будет больше значения параметра конец, или пока оно не станет равным ему.

При увеличении счётчика, цикл For … Next будет выполняться до тех пор, пока значение счётчика будет меньше значения параметра конец, или пока оно не станет равным ему.

Вложенные циклы For … Next

В одной и той же процедуре, циклы For … Next можно использовать неограниченное количество раз. При необходимости, их можно вкладывать один в другой.

Пример

Sub myCode()
    myNum = 0
    For x = 1 To 5
        For y = 1 To 5
            Cells(x, y).Value = myNum
        Next y
    Next x
End Sub

Результат

цикл excel vba

В этом примере, мы заполняем в Excel ячейки первых пяти столбцов и первых пяти строк цифрой 0.

Если вы самостоятельно не разобрались как работает этот код, то вот описание последовательности выполнения операций в нём:

  1. Переменной myNum присваивается значение 0. Эта цифра будет вставляться в ячейки.
  2. Начинается первый (внешний) цикл For … Next. На первом проходе по циклу, значение переменной x = 1.
  3. Выполняется вложенный цикл For … Next. Происходит 5 проходов цикла, в ходе которых переменная y увеличивается на 1 при каждом проходе цикла.
  4. Завершается внутренний цикл.
  5. Первый (внешний) цикл делает ещё 4 оставшиеся прохода.

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

Немедленный выход из цикла с помощью Exit For

Иногда возникает необходимость немедленно прекратить выполнение цикла For … Next ещё до того, как переменная счётчик достигнет заданного конечного значения. Это делается с помощью оператора Exit For.

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

Пример

 Sub myCode()
    myNum = 0
    For x = 1 To 5
        Cells(x, 1).Value = myNum
        myNum = myNum + 1
        If myNum >= 2 Then
            MsgBox "Останавливаем цикл, потому что значение переменной myNum больше или равно 2"
            Exit For
        End If
    Next x
End Sub

Результат

урок vba

В одном цикле может быть записано любое количество операторов Exit For. После выполнения этого оператора программа сразу же прекращает выполнение цикла и переходит к операторам которые расположены в тексте сразу после данного цикла.

Main Menu