Щоби попрактикуватись в тому, що ми щойно вивчили, ми покроково розглянемо процес створення макроса для розфарбування шахматної дошки розміром 10х10 (в червоне та чорне), починаючи з поточної активної комірки.
Давайте поглянемо на результат циклу, який ми хочемо отримати:
Далі, першим кроком вправи буде створення порожньої процедури:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Кількість клітинок, які ми хочемо зафарбувати
'...
End Sub
Давайте почнемо з додавання циклу FOR, щоби зафарбувати в чорний колір колонку A (Константа NB_CELLS дорівнює 10).
Маємо отримати наступний результат:
Давайте поглянемо на код:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Кількість комірок, які ми хочемо зафарбувати
For r = 1 To NB_CELLS 'r => номер рядка
Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Чорний
Next
End Sub
Наступний крок зафарбовує кожну наступну клітинку в червоне, за допомогою інструкції IF (базуючись на тому, чи номер рядка є парний чи непарний ). Див. нижче:
Код для вирішення цієї підзадачі наступний:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Кількість комірок, які ми хочемо зафарбувати
For r = 1 To NB_CELLS 'r => номер рядка
If r Mod 2 = 0 Then 'Mod => є залишком від ділення
Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Червоний
Else
Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Чорний
End If
Next
End Sub
Умова IF r Mod 2 = 0 означає: якщо залишок від ділення r на 2 дорівнює 0...
Лише номер рядка, який є парним, має залишок 0 від ділення на 2:
Як зробити ще один цикл, який би виконував вже написаний нами цикл для 10 колонок. Див. нижче:
Код для вирішення цієї підзадачі наступний:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 '10x10 шахматна дошка з комірок
For r = 1 To NB_CELLS 'r => Номер рядка
For c = 1 To NB_CELLS 'c => Номер колонки
If r Mod 2 = 0 Then
Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Червоний
Else
Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Чорний
End If
Next
Next
End Sub
Тепер другий цикл є вставлений в перший.
Щоби досягнути наступний результат...
Замініть:
If r Mod 2 = 0 Then
На:
If (r + c) Mod 2 = 0 Then
Все, що залишилося зробити, це змінити код так, щоби шахова дошка створювалася починаючи з вибраної комірки (а не A1). Див нижче:
Для цього напишемо наступний код:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 '10x10 шахматна дошка з комірок
Dim offset_row As Integer, offset_col As Integer ' => додаємо 2 змінні
'Зміщення (рядків) починаючи з першої комірки = номер рядка поточної активної комірки - 1
offset_row = ActiveCell.Row - 1
'Зміщення (колонок) починаючи з першої комірки = номер колонки поточної активної комірки - 1
offset_col = ActiveCell.Column - 1
For r = 1 To NB_CELLS 'Номер рядка
For c = 1 To NB_CELLS 'Номер колонки
If (r + c) Mod 2 = 0 Then
'Комірка(номер рядка + додаткове зміщення рядків, номер колонки +
'додаткове зміщення колонок)
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Червоний
Else
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Чорний
End If
Next
Next
End Sub