Para praticar o que acabamos de aprender, percorreremos o processo de criação de uma macro para pintar um tabuleiro de xadrez 10x10 (vermelho e preto) começando na célula atualmente ativa.
Vejamos a saída do loop que queremos obter:
A seguir, o primeiro passo do exercício será criar um procedimento vazio:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'O número de células que queremos pintar
'...
End Sub
Vamos começar adicionando um loop FOR para escurecer a coluna A (a constante NB_CELLS é 10).
Devemos obter o seguinte resultado:
Vamos dar uma olhada no código:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'O número de células que queremos pintar
For r = 1 To NB_CELLS 'r => número da linha
Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Preto
Next
End Sub
A próxima etapa colore cada célula subsequente de vermelho, usando a instrução IF (com base no fato de o número da linha ser par ou ímpar). Ver mais baixo:
O código para resolver esta subtarefa é o seguinte:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'O número de células que queremos pintar
For r = 1 To NB_CELLS 'r => número da linha
If r Mod 2 = 0 Then 'Mod => é o resto da divisão
Cells(r, 1).Interior.Color = RGB(200, 0, 0) 'Vermelho
Else
Cells(r, 1).Interior.Color = RGB(0, 0, 0) 'Preto
End If
Next
End Sub
A condição IF r Mod 2 = 0 significa: se o resto da divisão de r por 2 for 0...
Somente o número da linha par tem resto 0 quando dividido por 2:
Como fazer outro loop que executaria o loop que já escrevemos para 10 colunas. Ver mais baixo:
O código para resolver esta subtarefa é o seguinte:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Tabuleiro de damas 10x10 com células
For r = 1 To NB_CELLS 'r => Número da linha
For c = 1 To NB_CELLS 'c => Número da coluna
If r Mod 2 = 0 Then
Cells(r, c).Interior.Color = RGB(200, 0, 0) 'Vermelho
Else
Cells(r, c).Interior.Color = RGB(0, 0, 0) 'Preto
End If
Next
Next
End Sub
Agora o segundo ciclo está inserido no primeiro.
Para alcançar o seguinte resultado...
Substituir:
If r Mod 2 = 0 Then
Sobre:
If (r + c) Mod 2 = 0 Then
Resta apenas alterar o código para que o tabuleiro de xadrez seja criado a partir da célula selecionada (não A1). Veja abaixo:
Para isso, escreveremos o seguinte código:
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'Tabuleiro de damas 10x10 com células
Dim offset_row As Integer, offset_col As Integer '=> adicione 2 variáveis
'Deslocamento (linhas) começando na primeira célula = número da linha da célula ativa atual - 1
offset_row = ActiveCell.Row - 1
'Deslocamento (colunas) começando na primeira célula = número da coluna da célula ativa atual - 1
offset_col = ActiveCell.Column - 1
For r = 1 To NB_CELLS 'Número da linha
For c = 1 To NB_CELLS 'Número da coluna
If (r + c) Mod 2 = 0 Then
'Célula(número da linha + deslocamento adicional da linha, número da coluna +
'deslocamento adicional de alto-falantes)
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) 'Vermelho
Else
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) 'Preto
End If
Next
Next
End Sub