Щоби попрактикуватись в тому, що ми щойно вивчили, ми покроково розглянемо процес створення макроса для розфарбування шахматної дошки розміром 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