Цикли і оператор if - макроси в excel

Ви вже знаєте основні об'єкти VBA Excel і дії з ними. Пора переходити до справжньої автоматизації.

Цикли - повторювані дії. Буває потрібно зробити одне і те ж дію певну кількість разів (наприклад, на п'яти аркушах вставити стовпець з однаковими даними або заголовком), а буває, що потрібно робити якусь дію "до тих пір, поки." (Наприклад, поки не знайдеться рядок з потрібними даними). У VBA для двох цих випадків є два цикли: "for" - для повторення дій заданий число раз, і "while" - для повторення дій "до тих пір, поки.". Різниця між двома циклами тільки одна: в першому випадку ви знаєте, скільки разів треба повторити цикл, а в другому - не знаєте, але знаєте, коли потрібно зупинитися. Є й інші цикли, але їх можна легко замінити цими двома.

Візьмемо наш приклад: потрібно на п'ять аркушів вставити, наприклад, перший стовпець, порожній.

For i = 1 to 5 'привласнює значення змінної i в перший раз 1,

'Потім додаючи по 1 з кожним новим заходом в

'Цикл. Значення 5 буде останнім.

Sheets (i) .Activate 'активуємо черговий лист

Columns (1) .Insert 'вставляємо перший стовпець

Next i 'кінець циклу, тобто кінець списку дій,

'Які потрібно зробити 5 разів поспіль

Цикл While використовується частіше, ніж For. тому що часто ми не знаємо, скільки разів потрібно зробити якусь дію. Він використовується, наприклад, при пошуку рядки з заданими критеріями. Розглянемо такий приклад: в шпальтах є дані - прізвище (1 стовпець), ім'я (2 стовпець), по батькові (3), рік народження (4). Нам потрібно знайти Іванова і, наприклад, видалити його з бази. Припустимо, ми знаємо, що така людина один. Тоді програма може бути такою:

i = 2 'визначаємо, з якого рядка починається база (в першому рядку розташовані заголовки)

Do While Cells (i, 1)<>"Іванов" 'робити до тих пір, поки

В результаті цикл закінчиться на шуканої рядку. Після цього можна робити з цим рядком все, що завгодно.

Або, може бути, ми не знаємо, скільки Іванових в нашій базі і хочемо видалити їх всіх. Тут нам знадобиться умовний оператор If

Умовний оператор If (якщо) називається так, тому що перевіряє виконання умови. Принцип його роботи зрозуміти дуже просто: якщо умова виконується, то робимо так, інакше робимо так. Розглянемо наш приклад: нам потрібно пробігти по всій базі, тобто до тих пір, поки рядка не порожні, тобто:

Do While C ells (i, 1)<>""

Зауважимо, що важливо, щоб не було пропусків. Якщо у вашій базі є рядки з порожніми осередками, то можна вказувати більш складну умову, наприклад

Do WhileС ells (i, 1)<>"" And З ells (i + 1,1)<>"" And З ells (i + 2,1)<>""

тобто потрібно, щоб три рядки підряд були порожніми в першому стовпці. або

Do WhileС ells (i, 1)<>"" And З ells (i, 2)<>"" And З ells (i, 3)<>""

тобто потрібно, щоб в першому, другому і третьому стовпчиках рядки було порожньо.

Скористаємося цим умовою

Do WhileС ells (i, 1)<>"" And З ells (i, 2)<>"" And З ells (i, 3)<>""

IfCells (i, 1) = "Іванов" then 'Якщо в рядку Іванов

Rows (i) .Delete 'тоді видаляємо цей рядок

i = i-1 'повертаємося на рядок вище

End If 'закриваємо умова

i = i + 1 'переходимо до наступного рядка