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