Vba for next – перехід до наступного значення. Цикли в VBA. Оператор переривання циклу "Exit For"

28.03.2020 Поради

Цикл For... Next в VBA Excel, його синтаксис та опис окремих компонентів. Приклади використання циклу For... Next.

Цикл For... Next у VBA Excel призначений для виконання групи операторів необхідну кількість разів, задану змінною циклу, що управляє, - лічильником. При виконанні циклу значення лічильника після кожної ітерації збільшується або зменшується число, вказане виразом оператора Step, або, за замовчуванням, на одиницю. Коли необхідно застосувати цикл до елементів, кількість яких і індексація групи (діапазон, масив, колекція) невідомі, слід використовувати .

Синтаксис циклу For... Next

For counter = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ] For лічильник = початок To кінець [ Step крок ] [ оператори ] [ Exit For ] [ оператори ] Next [ лічильник ]

У квадратних дужкахвказано необов'язкові атрибути циклу For... Next.

Компоненти циклу For... Next

Компонент Опис
counter Обов'язковий атрибут. Числова змінна, що виконує роль лічильника, яку ще називають керуючою змінною циклу.
start Обов'язковий атрибут. Числове вираз, що задає початкове значення лічильника.
end Обов'язковий атрибут. Числове вираз, що задає кінцеве значення лічильника.
Step* Необов'язковий атрибут. Оператор, що вказує на те, що буде заданий крок циклу.
step Необов'язковий атрибут. Числове вираз, що задає крок циклу. Може бути як позитивним, і негативним.
statements Необов'язковий атрибут**. Оператори коду.
Exit For Необов'язковий атрибут. Оператор виходу із циклу до його закінчення.
Next [ counter ] Тут counter- Необов'язковий атрибут. Це те саме ім'я керуючої змінної циклу, яке можна тут не вказувати.

*Якщо атрибут Stepвідсутній, цикл For... Next виконується з кроком за умовчанням, що дорівнює 1 .

**Якщо не використовувати в циклі свій код, значення застосування циклу втрачається.

Приклади циклів For... Next

Ви можете скопіювати приклади циклів у свій модуль VBA, послідовно запускати їх на виконання та дивитися результати.

Найпростіший цикл

Заповнюємо десять перших осередків першого стовпця активного листа Excel цифрамивід 1 до 10:

Sub test1() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub

Найпростіший цикл із кроком

У попередній цикл доданий оператор Step зі значенням 3, а результати записуємо у другий стовпець:

Sub test2() Dim i As Long For i = 1 To 10 Step 3 Cells(i, 2) = i Next End Sub

Цикл із негативними аргументами

Цей цикл заповнює десять перших осередків третього стовпця у зворотній послідовності:

Sub test3() Dim i As Long For i = 0 To -9 Step -1 Cells(i + 10, 3) = i + 10 Next End Sub

Збільшуємо розмір кроку до -3 та записуємо результати у четвертий стовпець активного листа Excel:

Sub test4() Dim i As Long For i = 0 To -9 Step -3 Cells(i + 10, 4) = i + 10 Next End Sub

Вкладений цикл

Зовнішній цикл послідовно задає індекси перших десяти рядків активного аркуша, а вкладений цикл складає числа перших чотирьох осередках рядки з поточним індексом і записує суму в комірку п'ятого стовпця. Перед запуском вкладеного циклу з накопичувальним додаванням, п'яту комірку відповідного рядка обнулюємо, щоб у разі знаходження в ній якогось числа, воно не додалося до підсумкової суми.

Sub test5() Dim i1 As Long, i2 As Long For i1 = 1 To 10 "П'ятому осередку в рядку i1 присвоюємо 0 Cells(i1, 5) = 0 For i2 = 1 To 4 Cells(i1, 5) = Cells(i1 , 5) + Cells(i1, i2) Next Next End Sub

Вихід із циклу

У шостий стовпець активного листа запишемо назви десяти тварин, звичайно ж, за допомогою циклу For... Next:

Sub test6() Dim і As Long For i = 1 To 10 Cells(i, 6) = Choose(i, "Ведмідь", "Слон", "Жираф", "Антилопа", _ "Крокодил", "Зебра", "Тигр", "Ящірка", "Лев", "Бегемот") Next End Sub

Наступний цикл шукатиме у шостому стовпці крокодила, який з'їв калоші. У комірку сьомого стовпця цикл, доки не зустріне крокодила, записуватиме рядок «Тут був цикл», а коли виявить крокодила, запише «Він з'їв калоші» і припинить роботу, виконавши команду Exit For. Це буде видно по осередках поруч із назвами тварин нижче крокодила, в яких не буде тексту «Тут був цикл».

Sub test7() Dim i As Long For i = 1 To 10 If Cells(i, 6) = "Крокодил" Then Cells(i, 7) = "Він з'їв калоші" був цикл" End If Next End Sub

Такі дані на активному листі Excelви отримаєте, якщо послідовно запустите на виконання редактору VBA всі сім підпрограм із прикладів, що демонструють роботу циклів For... Next.

Цикл із дробовими аргументами

Атрибути start, end і step можуть бути представлені числом, змінним або числовим виразом:

For i = 1 To 20 Step 2 For i = a To b Step c For i = a - 3 To 2b + 1 Step c/2

В результаті обчислення значення змінної поза циклом або виразу всередині його може вийти дробовий результат. VBA Excel округлить його до цілого числа, використовуючи:

"Значення атрибутів до округлення For i = 1.5 To 10.5 Step 2.51 "Округлені значення атрибутів For i = 2 To 10 Step 3

Намагайтеся не допускати попадання в тіло циклу For... Next неокруглених значень аргументів, щоб не отримати непередбачуваних результатів його виконання. Якщо без дробових чисел не обійтися, а необхідно використовувати звичайне заокруглення, застосовуйте в коді VBA функціюробочого листа WorksheetFunction.Round для округлення числа перед використанням його в циклі For... Next.

Зустрічаються ситуації, коли від програми VBA потрібно зробити кілька разів поспіль той самий набір дій (тобто повторити кілька разів один і той самий блок коду). Це можна зробити з допомогою циклів VBA.

Оператор циклу "For" у Visual Basic

Структура оператора циклу Forв Visual Basicможе бути організована в одній із двох форм: як цикл For … Nextабо як цикл For Each.

Цикл "For ... Next"

Цикл For … Nextвикористовує змінну, яка послідовно набуває значення із заданого діапазону. З кожною зміною значення змінної виконуються дії, які у тілі циклу. Це легко зрозуміти з простого прикладу:

For i = 1 To 10 Total = Total + iArray(i) Next i

У цьому простому циклі For … Nextвикористовується змінна i, яка послідовно набуває значення 1, 2, 3, … 10, і для кожного з цих значень виконується код VBA, що знаходиться всередині циклу. Таким чином, даний цикл підсумовує елементи масиву iArrayу змінній Total.

У наведеному вище прикладі крок збільшення циклу не вказаний, тому для покрокового збільшення змінної iвід 1 до 10 за замовчуванням використовується збільшення 1 . Однак, у деяких випадках потрібно використовувати інші значення збільшення циклу. Це можна зробити за допомогою ключового слова Step, як показано в наступному прикладі.

For d = 0 To 10 Step 0.1 dTotal = dTotal + d Next d

Так як у наведеному вище прикладі заданий крок збільшення рівний 0.1 , то змінна dTotalдля кожного повторення циклу набуває значення 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

Для визначення кроку циклу VBA можна використовувати негативну величину, наприклад, ось так:

For i = 10 To 1 Step -1 iArray(i) = i Next i

Тут крок збільшення дорівнює -1 тому змінна iз кожним повторенням циклу набуває значення 10, 9, 8, … 1.

Цикл "For Each"

Цикл For Eachсхожий на цикл For … Next, але замість того, щоб перебирати послідовність значень для змінної-лічильника, цикл For Eachвиконує набір дій для кожного об'єкта із зазначеної групи об'єктів. У наступному прикладі за допомогою циклу For Eachвиконується перерахування всіх листів у поточній робочої книги Excel:

Dim wSheet As Worksheet For Each wSheet in Worksheets MsgBox "Знайдено аркуш: " & wSheet.Name Next wSheet

Оператор переривання циклу "Exit For"

Оператор Exit Forзастосовується для переривання циклу. Як тільки код зустрічається цей оператор, програма завершує виконання циклу і переходить до виконання операторів, що у коді відразу після цього циклу. Це можна використовувати, наприклад, для пошуку певного значення масиву. Для цього за допомогою циклу проглядається кожен елемент масиву. Як тільки знайдений елемент, переглядати інші немає необхідності - цикл переривається.

Застосування оператора Exit Forпоказано в наступному прикладі. Тут цикл перебирає 100 записів масиву та порівнює кожну зі значенням змінної dVal. Якщо збіг знайдено, цикл переривається:

For i = 1 To 100 If dValues(i) = dVal The IndexVal = i Exit For End If Next i

Цикл "Do While" у Visual Basic

Цикл Do Whileвиконує блок коду доти, доки виконується задана умова. Далі наведено приклад процедури Sub, в якій за допомогою циклу Do Whileвиводяться послідовно числа Фібоначчі, що не перевищують 1000:

"Процедура Sub виводить числа Фібоначчі, що не перевищують 1000 Sub Fibonacci() Dim i As Integer "лічильник для позначення позиції елемента в послідовності Dim iFib As Integer "зберігає поточне значення послідовності Dim iFib_Next As Integer "зберігає наступне значення послідовності Dim розмір наступного збільшення "ініціалізуємо змінні i і iFib_Next i = 1 iFib_Next = 0" цикл Do While буде виконуватися до тих пір, поки значення "поточного числа Фібоначчі не перевищить 1000 Do While iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

У наведеному прикладі умова iFib_Next< 1000 перевіряється на початку циклу. Тому якби перше значення iFib_Nextбуло б більше 1000, то цикл не виконувався б жодного разу.

Інший спосіб реалізувати цикл Do While- Помістити умову не на початку, а в кінці циклу. У цьому випадку цикл буде виконаний хоча б раз, незалежно від того, чи виконується умова.

Схематично такий цикл Do Whileз умовою, що перевіряється, в кінці виглядатиме ось так:

Do ... Loop While iFib_Next< 1000

Цикл "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<20)
[Інструкції] або [блок Операторів]
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 наведено на рис. 5.28.

Counter – будь-яка чисельна змінна VBA, зазвичай змінна типу Integer чи Long.

Start - будь-яке чисельне вираз і визначає початкове значення змінної Counter.

End - Чисельний вираз, що визначає кінцеве значення для змінної Counter .

Statements - Один, кілька або жодного оператора. Ці оператори виконують тіло циклу. VBA виконує кожен із цих операторів при кожному виконанні циклу.

Ключове слово Next

Counter=counter+StepSise

9.28. Алгоритм циклу For…

Ключове слово Next повідомляє VBA про те, що досягнуто кінець циклу. Не обов'язкова змінна Counter після ключового слова Next повинна бути тією ж змінною Counter, яка була задана після ключового слова For початку структури циклу.

Синтаксис:

For counter = Start To End

При виконанні циклуForNext VBAнадходить так:

Надає значення, представлене Star , змінної З ounter .

Виконує всі оператори, представлені за допомогою Statements , доки не досягне ключового слова Next . Ключове слово Next показує VBA те що, що досягнуто кінець тіла циклу.

Змінює змінну З ounter на величину StepSize (якщо включається необов'язкове слово Step) Якщо Step не визначено, VBA збільшує змінну counter на 1.

Повертається до початку циклу та порівнює поточне значення змінної З ounter із значенням, представленим End. Якщо значення З ounter менше значення End , VBA продовжує виконання з першого оператора після ключового слова Next .

9.2.4. Введення-виведення одновимірних та двовимірних масивів

Масив (array) – це колекція змінних, які мають спільне ім'я та базовий тип. Масив є зручним способом зберігання декількох пов'язаних елементів даних в єдиному контейнері для більшої зручності та ефективності програмування. Всі елементи даних, що зберігаються в масиві, повинні мати той самий тип.

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

Розмірність масиву

У мовах програмування зазвичай використовуються одновимірні та багатовимірні масиви, одні з яких описують відносно прості, інші складніші об'єкти.

Одновимірні масиви

Приклад одновимірного масиву наведено у таблиці № 9.9.

Таблиця №9.9

У програмуванні зазвичай використовується нумерація з нульовою базою.

Для доступу до даних, що зберігаються в певному елементі масиву, слід вказувати ім'я масиву з наступним числом, яке називається індексом елемента. Індекс укладають у круглі дужки. Наприклад, якщо масив у таблиці № 1.1 має ім'я DoubleArray, наступний оператор присвоює число 45 змінної DoubleAny.

DoubleAny = DoubleArray (3)

У цьому операторі число 3 є індекс масиву. Оскільки нумерація елементів починається з нуля, елемент, на який посилається оператор, є фактично четвертим елементом масиву DoubleArray.

При виконанні оператора DoubleArray VBA вибирає значення 45 і зберігає це значення в змінній DoubleArray.

Цей же оператор можна використовувати при збереженні даних у масиві:

DoubleArray (5)=12.

При виконанні цього оператора VBA поміщає значення 12 в зазначений елемент масиву, замінюючи попередній вміст цього елемента.

Одновимірні масиви зазвичай використовуються для представлення різних списків даних.

Багатовимірні масиви

Коли необхідно подати таблиці даних з організацією даних у форматі рядків та стовпців, для цього використовують багатовимірні масиви.

У двовимірному масиві адреса кожного осередку складається з двох чисел: номер рядка (перший індекс) та номер стовпця (другий індекс). У VBA можна створювати масиви до 60 вимірів.

Якщо масиві число елементів не змінюється, такий масив називається статичним.

Статичні та динамічні масиви

Якщо під час виконання VBA-програми можна змінювати кількість елементів у масиві, такі масиви називаються динамічними. Для зміни розміру динамічного масиву використовується оператор ReDim.

VBA зберігає зарезервовану область пам'яті для всіх елементів у масиві, доки існує змінна типу масиву. Подібні масиви називаються статичними (static), тому що кількість елементів у масиві не змінюється.

ОператорOption Base

Зазвичай VBA використовуються масиви з нульовою базою. Оператор Option Base дозволяє задавати 0 або 1 як початкове число за промовчанням для індексів масиву. Якщо оператор Option Base не використовується, VBA починає нумерацію індексів з 0 (за умовчанням). Перед оголошенням будь-яких змінних, констант або процедур необхідно помістити оператор Option Base в область оголошень модуля. Не можна розміщувати оператор Option Base всередині процедури. Можна мати лише один оператор Option Base у модулі.

Синтаксис:

Option Base 0|1

Оголошення масивів

Оголошення масиву за допомогою оператора Dimмає наступний синтаксис.

Синтаксис:

Dim VarName ()

Dim VarName (upper, upper]….)[ As type],

VarName – будь-яке ім'я для масиву, що відповідає VBA-правилам для імен ідентифікаторам.

Subscripts – вимір масиву.

As Type - тип даних.

Lower – нижня межа значення індексу.

Upper – верхня межа значення індексу.

Type – тип даних

Якщо опустити тип, всі елементи масиву матимуть тип Variant. VBA ініціалізує елементи числових масивів нулями та елементи рядкових масивів порожніми рядками.

Dim str_array (1 To 100) As String

Dim variant_array ()

Dim str_Multiplication (0 To 15, 0 To 15) As String

Використання масивів

Для доступу до елемента масиву необхідно вказати ім'я масиву, за яким слідує значення індексу, укладене у круглі дужки.

Звернення до елемента масиву має наступний синтаксис.

Синтаксису.

arrayName (validIndex1, ….)

validIndex – ім'я масиву.

validIndex1 – допустиме значення індексу першого вимірювання масиву.

validIndex2 – допустиме значення індексу другого вимірювання масиву.

Необхідно надавати значення індексу для кожного вимірювання масиву при кожному зверненні до елемента масиву.

Введення-виведення одновимірних масивів

При введенні одновимірного масиву необхідно послідовно вводити 1-й, 2-й і т.д. елементи масиву, аналогічно надходять під час виведення. Для введення чи виведення масиву необхідно організувати цикл. Найбільш зручно використовувати для введення та виведення одновимірного масиву алгоритм з використанням безумовного циклу.

Алгоритм введення виведення одновимірного масиву наведено на рис.5.29.

Розшифрування процедури наведено нижче.

Sub Massiv () – назва процедури.

Dim Mas (5) As Integer - оголосили одновимірний масив із 5-ма елементами, тип чисел – цілі.

Dim s As String – оголосили робочу змінну для завершального виведення даних із масиву у діалоговому вікні. As String – тип даних у змінній для зберігання.

For i = 1 To 5 – процедура у першому циклі For….Next, приймає цілі числа від 1 до 5 і заносить в масив.

Mas(i) = InputBox(i) – введення цілого числа для i-го елемента.

Next – перехід до другого циклу (елементи масиву заносяться в рядок та виводяться на екран у діалоговому вікні за допомогою оператора MsgBox).

For i = 1 To 5 – елементи у рядку з 1 до 5.

s = s & Mas(i) & ";" - Формування рядка з елементів масиву. Масив виводиться в один рядок. Елементи масиву поділяються символом ";".

MsgBox s – виведення раніше введеного масиву.

Рис.5.27. Алгоритм введення-виводу одновимірного

Мал. 9.29. Алгоритм та процедура введення-виведення одновимірного масиву

Введення-виведення двовимірного масиву

Алгоритм та процедура введення та виведення двовимірного масиву представлений на рис.5.30.

Опис цієї процедури:

Sub Massiv () – назва процедури

Оголошення змінних, що використовуються у цій процедурі:

Dim Mas (5, 5) As Integer - оголосили двомірний масив з 5 стовпцями та п'ятьма рядками, тип чисел – цілі.

Dim s As String – оголосили робочу змінну для завершального виведення даних із масиву у діалоговому вікні. As String – тип даних у змінній для зберігання

Next i - закінчення операції присвоєння змінних

Введення елементів масиву на згадку про комп'ютер:

For i = 1 To 5 – введення здійснюється з першого елемента першого рядка, потім другого і т.д.

For j = 1 To 5 до кінця першого рядка, потім з першого елемента другого рядка і т.д.

Mas(i,j) = InputBox(i,j) – оператор введення елементів масиву на згадку про ЕОМ

Мал. 9.30. Алгоритм та процедура введення-виведення двовимірного масиву

Алгоритми впорядкування масиву

Як приклад наведемо алгоритм та процедуру сортування одномірного масиву методом «бульбашка»

Виведення елементів введеного масиву з пам'яті ЕОМ:

For i = 1 To 5 – висновок здійснюється аналогічно до введення

s = s & Mas (i,j) & “; ”

s = s & Chr (13) – переклад рядка (виведення не одним рядком, а кількома, як у введеному масиві)

Next i – закінчення дії оператора For…

MsgBox s – виведення раніше введеного масиву на діалогове вікно

End Sub – закінчення процедури.

У цьому уроці буде розглянуто роботу з циклом Forу VBA. Приклад роботи з циклом For, так само буде продемонстровано приклад створення формул Excel за допомогою макросів.

Цикл Forпрацює за принципом лічильника. Forзастосовується в тих випадках, коли необхідно повторити деякі дії заздалегідь відому кількість разів. Наприклад, цикл Forчасто використовується під час читання масивів.

Цикл Forмає наступний синтаксис:
For лічильник = початок циклу To кінець циклу [Step крок]
група операторів, команд та ін.
Exit For
Next лічильник

  • "лічильник" -змінна, яка змінюється на вказаний "Крок".Якщо крок не вказано, за замовчуванням береться одиниця.
  • "початок циклу", "кінець циклу" -числа або змінні вказують нижню межу лічильника та верхню. Зупинка циклу відбувається тоді, коли "лічильник" >"кінець циклу" (чи, якщо цикл зворотний, тобто. з кроком -1, то "лічильник"< "кінець циклу").
  • Exit For –команда примусової зупинки циклу. Застосовується в тих випадках, коли сталася певна подія, після якої необхідно зупинити виконання команд у циклі, або для запобігання виникненню помилки.

Розглянемо кілька прикладів використання циклу For. Надалі з цим циклом зустрічатимемося досить часто.

Приклад 1
Дано два стовпці С і Е заповнені числами:

Необхідно скласти числа в стовпці С з числами стовпця Е наступним чином:
С2+Е21, С3+E20, …, C21+E2. Результат вивести стовпець D як формули тобто. зміст комірки результату має бути "=С2+Е21".

Код макросу виглядає наступним чином (куди прописувати код читаємо):

SubЦикл_For()
"константа вказує межу циклу тобто до якого значення циклу бігти
Const n = 21
For i = 2 To n
створюємо рядок формулу і зберігаємо її в комірку
Cells(i, 4) = "=C" & CStr(i) & "+E" & CStr((n - i) + 2)
продовження коли виконується в циклі
Next i
решта коду програми
End Sub

Розбираємо написаний код:

  • Const n = 21 – опис константи n зі значенням 21, тобто. число рядків за яким необхідно пробігтися циклу For;
  • For i = 2 To n - i лічильник, який буде змінюватися на 1 з кожним проходом циклу. Лічильник починається з 2 і закінчується коли i>n;
  • Cells(i, 4) - осередок виділеногоаркуша, i номер рядка, 4 -номер стовпця у який виводиться результат. Зверніть увагу, наш лічильник i вказує номер рядка аркуша Excel;
  • Next i -оператор закриття циклу та перекладу покажчика до For.Все що знаходиться між Forі Nextвиконується у циклі;
  • CStr -функція, що перетворює число в текст.

Осередку ми присвоюємо формулу створену наступним чином "=C" & CStr(i) & "+E" & CStr((n - i) + 2). Знак & - "склеювання" символів, рядків. У результаті вийде формула "=Сn+E((n - i) + 2)" де n = 21, i - лічильник.
Страшно? Це тільки здається:)

Всі. Після виконання макросу ми отримаємо наступний стовпець (виділений), а в кожному осередку формула:

Приклад 2
Тепер розглянемо цикл із зазначеним кроком. Після розрахунку минулого макросу ми отримали три стовпці, тепер нам необхідно з стовпця E відняти D, у стовпець F вивести формули віднімання. Код макросу наступний:

SubЦикл_For_з_кроком()
Const n = 21
For i = n To 2 Step -1
Cells(i, 6) = "=E" & CStr(i) & "-D" & CStr(i)
Next i
End Sub

В даному випадку все те саме, тільки цикл тепер "біжить" не від 2, а від 21 до 2 з кроком (Step) -1.
Результат виконання отримаємо наступний:

Цикл ForУ VBA не є єдиним циклом. Надалі будуть розглянуті ще кілька варіантів циклів, без яких не обійтися при написанні макрокоманд в Excel.