Capítulo 19: Lógica com VBA II (Laços de Repetição)

🎯 Objetivo da Aula

O que diferencia um humano de uma máquina é que a máquina não se cansa de fazer a mesma coisa mil vezes. Na programação, usamos os Loops (Laços de Repetição) para isso.

Nesta aula, você aprenderá a usar o comando For…Next. O objetivo é criar um script que percorra uma lista de faturas e pinte automaticamente de vermelho as que estão com pagamento atrasado, linha por linha, em frações de segundo.


🏢 O Cenário Prático (Seu Desafio)

Situação: O setor financeiro da FastLog tem uma planilha com 500 faturas. Eles precisam verificar quais já venceram e destacar essas linhas. Fazer isso manualmente demora muito. Missão: Você deve escrever um código que “leia” a planilha da linha 2 até a linha 10 (ou 500!) e, para cada linha, verifique o status. Se estiver “Atrasado”, o código deve pintar o fundo da célula de vermelho sozinho.


🧠 Fundamentos: Teoria do Excel (Laços de Repetição)

O Loop For funciona como um contador:

  • Você diz onde ele começa (Linha 2).
  • Você diz onde ele termina (Linha 10).
  • Ele executa o código e pula para a próxima linha (Next).

A sintaxe do FOR no código:

1
2
3
For i = 2 To 10
    ' Aqui dentro você coloca o que quer que aconteça em cada linha
Next i

📖 Exemplo Guiado: O Relógio que Conta Sozinho

Vamos fazer o Excel contar de 1 a 5 na tela sem precisarmos arrastar a célula.

Passo a Passo

  1. Abra o Editor de Código (Alt + F11).
  2. Insira um Módulo e digite:
1
2
3
4
5
6
7
8
Sub ContarAteCinco()
    Dim i As Integer
    ' O Loop começa no 1 e vai até o 5
    For i = 1 To 5
        ' Pega a célula na linha i, coluna 1 (A), e escreve o número lá
        Cells(i, 1).Value = "Número " & i
    Next i
End Sub
  1. Rode o código (F5).
  2. Volte para a planilha e veja a Coluna A. O Excel escreveu do Número 1 ao 5 sozinho!

✅ Resultado Esperado (Exemplo)

O Excel “viaja” pela coluna escrevendo os números linha por linha em milissegundos.

🔑 Gabarito de Fórmulas

(Lógica do Código)

  • For i = 1 To 5: Inicia o loop. A letra i é a variável que muda (1, depois 2, depois 3…).
  • Next i: Manda o Excel repetir o processo com o próximo número.

🛠️ Prática Obrigatória 1: Auditor de Cobrança Automático

Vamos usar o Loop para “ler” uma tabela inteira e pintar de vermelho quem não pagou.

Passo 1: Montando a Base de Faturas

Crie uma planilha com os seguintes dados:

  • A1: ID Fatura | B1: Status
  • Preencha de A2 até A10 com números quaisquer.
  • Na coluna B, escreva “Pago” ou “Atrasado” aleatoriamente.

Passo 2: Escrevendo o Código com Loop

  1. Aperte Alt + F11 para abrir o editor de código.
  2. No seu módulo, digite o seguinte código:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Sub ColorirAtrasados()
    Dim i As Integer
    
    ' O Loop vai percorrer da linha 2 até a linha 10
    For i = 2 To 10
        ' Se o que estiver na Coluna B (2) for "Atrasado"
        If Cells(i, 2).Value = "Atrasado" Then
            ' Pinta o fundo da célula de Vermelho (Cor 3)
            Cells(i, 2).Interior.ColorIndex = 3
            Cells(i, 2).Font.Color = vbWhite ' Letra branca para ler melhor
        End If
    Next i
    
    MsgBox "Auditoria concluída com sucesso!", vbInformation
End Sub

Passo 3: Executando o Processamento em Lote

  1. Volte ao Excel.
  2. Vá em Desenvolvedor > Macros, escolha ColorirAtrasados e clique em Executar.

✅ Resultado Esperado (Prática 1)

Todas as células que continham o texto “Atrasado” foram pintadas de vermelho instantaneamente. Você processou vários dados em lote.

🔑 Gabarito de Fórmulas

CódigoTradução
Cells(i, 2)Significa Célula(Linha, Coluna). Como o i muda, ele lê (2,2), (3,2)…
ColorIndex = 3Código interno do Excel para a cor vermelha.

🛠️ Prática Obrigatória 2: Limpador de Linhas Vazias

Muitas vezes recebemos planilhas de sistemas (como SAP) cheias de linhas em branco no meio dos dados. Vamos criar um robô que “pula” as linhas e apaga as vazias.

Passo 1: O Caos

Na Planilha 2, escreva nomes de produtos na Coluna A (A1 até A10), mas deixe as linhas A3, A5 e A8 totalmente vazias.

Passo 2: O Robô Faxineiro

No VBA, crie a nova Sub:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Sub LimparVazios()
    Dim i As Integer
    
    ' ATENÇÃO: Para apagar linhas, devemos ir de BAIXO para CIMA!
    ' Caso contrário, a numeração das linhas se perde ao apagar.
    For i = 10 To 1 Step -1
        ' Se a célula for vazia ("")
        If Cells(i, 1).Value = "" Then
            ' Apaga a linha inteira
            Cells(i, 1).EntireRow.Delete
        End If
    Next i
    
    MsgBox "Faxina concluída!"
End Sub

Passo 3: O Teste

Execute a Macro.

✅ Resultado Esperado (Prática 2)

O Excel encolherá sua tabela, apagando todas as linhas vazias e juntando os dados.

🔑 Gabarito de Fórmulas

CódigoTradução
Step -1Faz o Loop contar de trás pra frente (10, 9, 8…).
.EntireRow.DeleteComando que deleta a linha inteira da planilha.

📤 Instruções de Entrega (Microsoft Teams)

Após finalizar as duas práticas obrigatórias:

  1. Salve como .XLSM.
  2. Nome: Atividade_19_SeuNome_SeuSobrenome.xlsm
  3. No Microsoft Teams, envie o arquivo na tarefa “Capítulo 19 - Lógica com VBA II”.
  4. Clique em Entregar.

💡 Checkpoint de Lógica

O Loop é o motor de qualquer software. Quando você vê uma barra de carregamento ou quando o seu e-mail baixa 50 mensagens de uma vez, é um Loop For ou While rodando por trás. No Excel, o Loop transforma você de um digitador de dados em um Arquiteto de Processos.


🔥 Desafio de Fixação (Opcional): Loop com Soma Acumulada

Crie uma nova macro que percorra as linhas e vá somando o valor dos fretes em uma variável, mostrando o Total Final em um MsgBox no final do loop.

  1. Desafio: Crie uma variável Dim total As Double.
  2. Lógica: Dentro do laço (For), use total = total + Cells(i, 3).Value (supondo que os valores estejam na coluna 3).
  3. Fim: Após o Next i, coloque um MsgBox "O total é: " & total.

✅ Resultado Esperado (Desafio)

O seu código fará exatamente o mesmo trabalho que a função =SOMA(), mas você construiu a matemática inteira do zero na memória RAM do computador!