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