TOP

VBA-Lição 8.2. Loops (Loops)

YouLibreCalc for Excel logo

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