For Each Next VBA

Оператор For Each ... Next в VBA. Урок №30

Оператор For Each…Next не використовує лічильник циклів. Він повторює блок операторів для кожного об'єкта колекції (про колекції ми поговоримо трохи пізніше) або кожного елемента масиву.

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

For Each елемент In група
(операторы)
Next елемент

Тут,

  • елемент – змінна, яка використовується для інтерації (повторення) по всіх елементах колекції або масиву.
  • група – визначає об'єкт колекції або масив.

Якщо в параметрі група вказано об'єкт колекції, змінна елемент може мати тип Variant, Object, або такий самий тип як у колекції.

Якщо в параметрі група вказано масив, то змінна елемент обов'язково має бути оголошена лише з типом Variant.

Приклад коду For Each…Next в VBA

Sub myCode()
    For Each myNum In Range("A1:A5")
        myNum.Value = 0
    Next myNum
End Sub

У цьому прикладі відбувається прохід по діапазону комірок і заповнення їх вказаним значенням. Тобто в кожну комірку в діапазоні від A1 по A5 буде записано 0.

Результат

for each next приклад

Якщо раптом ми захочемо дописати якесь значення в ці комірки до вже наявного, то можна використати наступний код:

Sub myCode()
    myNum = 0
    For Each myNum In Range("A1:A5")
        myNum.Value = myNum + 2
    Next myNum
End Sub

В даному прикладі відбувається прохід по комірках в діапазоні від A1 по A5 і до вже наявного значення в цих комірках додається 2. Тобто, якщо, наприклад, в комірці A1 у нас спочатку було записано число 1, то після виконання нашої програми там вже буде записано 3 тому що 1+2=3.

Результат

цикл for each next

Щоб закріпити цю тему, розглянемо ще й приклад використання циклу For Each…Next при роботі з масивами:

Sub myCode()
    Dim myElem As Variant, myName As String, myGroup As Variant
    myGroup = Array("Іван", "Степан", "Сергій", "Юлія", "Марина")
    myName = "Масив містить наступні імена:" & Chr(13)
    For Each myElem In myGroup
        myName = myName & Chr(13) & myElem
    Next
    MsgBox myName
End Sub

Результат

for each next масив

Примусовий вихід із циклу For Each…Next

Для того, щоб перервати цикл до його завершення, використовують Exit For. Наприклад, в наступному коді ми проходимо по діапазону комірок від A1 по A5, але як тільки нам трапляється порожня комірка (в якій нічого не записано), то цикл відразу ж переривається.

Sub myCode()
 For Each rng In Range("A1:A5")
  If rng.Value = "" Then
   MsgBox "Комірка " & rng.Address & " пуста."
   Exit For
  End If
 Next
End Sub 

Результат

for each next exit for

Main Menu