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