If, ElseIf e Else no VBA: Exemplos Práticos (Aula 5)
Aula 5 do curso gratuito de VBA do Excel. Nesta aula você aprenderá como usar If, ElseIf, Else e End If para fazer sua macro tomar decisões. O conteúdo é voltado para iniciantes e inclui código comentado, exemplos de aplicação no trabalho, uma classificação automática de vendas e exercícios.
Trilha de aprendizado: Índice do curso | ← Aula 4 — Variáveis no VBA | Aula 5 — Condições no VBA.
O que são condições If, ElseIf e Else no VBA?
Uma condição permite que o VBA escolha entre executar ou não executar determinadas instruções. Pense em uma regra de trabalho: se a venda atingiu a meta, mostre “Meta atingida”; caso contrário, mostre “Abaixo da meta”. O VBA usa expressões que resultam em True (verdadeiro) ou False (falso) para decidir qual bloco executar.
If: inicia uma verificação. O código dentro do bloco roda quando a condição é verdadeira.Then: separa a condição das instruções que dependem dela.ElseIf: testa uma nova condição caso as anteriores sejam falsas.Else: oferece uma alternativa quando nenhuma condição anterior foi atendida.End If: encerra uma estrutura de decisão com várias linhas.
Antes de começar: como preparar o Excel
Use o Excel instalado no computador, no Windows ou Mac. O Excel para a Web não executa macros VBA. Crie uma pasta de trabalho nova e vazia para os exercícios; algumas macros alteram células e não devem ser usadas na única cópia de um arquivo importante.
- Abra o Excel e crie uma pasta de trabalho vazia.
- No Windows, pressione Alt + F11 para abrir o Editor VBA. No Mac, abra o Visual Basic pela guia Desenvolvedor; os atalhos podem ser diferentes.
- No Editor VBA, escolha Inserir > Módulo. Use um módulo padrão para os exemplos.
- Digite
Option Explicituma única vez no início desse módulo, antes de qualquer procedimento. Essa instrução exige a declaração das variáveis. - Cole os procedimentos abaixo sem repetir Option Explicit. Para executar, deixe o cursor dentro de uma macro e pressione F5 no editor; no Windows, também é possível executar pelo menu Desenvolvedor > Macros (Alt + F8).
- Ao terminar, salve como Pasta de Trabalho Habilitada para Macro do Excel (.xlsm). O formato .xlsx não preserva códigos VBA.
1. Como usar If Then no VBA
A forma mais simples verifica apenas uma condição. Se ela for falsa, o VBA segue em frente sem executar o bloco. Veja uma situação em que o estoque está abaixo do mínimo exigido.
Sub ExemploIfThen()
Dim estoque As Long
estoque = 3
If estoque < 5 Then
MsgBox "Atenção: estoque baixo!"
End If
End Sub
Resultado esperado: aparece a mensagem Atenção: estoque baixo! porque 3 é menor que 5. Altere estoque = 3 para estoque = 8: a mensagem não aparece, porque a condição ficou falsa. As linhas recuadas facilitam a leitura, embora os espaços de indentação não mudem o resultado.
2. Como usar If Then Else no VBA
Use Else quando precisar definir dois caminhos: um para a condição verdadeira e outro para a falsa. Por exemplo, a meta mensal de um vendedor é de R$ 1.000.
Sub ExemploIfElse()
Dim vendas As Currency
Dim meta As Currency
vendas = 1200
meta = 1000
If vendas >= meta Then
MsgBox "Meta atingida!"
Else
MsgBox "Abaixo da meta."
End If
End Sub
Resultado esperado: Meta atingida! Como R$ 1.200 é maior que R$ 1.000, o VBA executa apenas o primeiro caminho. Se alterar vendas = 1200 para vendas = 900, o resultado será Abaixo da meta.
3. Como usar ElseIf com várias condições
Quando uma decisão tem três ou mais resultados possíveis, use ElseIf. O VBA analisa os testes na ordem em que aparecem e executa somente o primeiro bloco cuja condição é verdadeira.
Sub ExemploElseIf()
Dim vendas As Currency
vendas = 1800
If vendas >= 1500 Then
MsgBox "Meta superada!"
ElseIf vendas >= 1000 Then
MsgBox "Meta atingida!"
Else
MsgBox "Abaixo da meta."
End If
End Sub
Resultado esperado: Meta superada! Teste depois vendas = 1200 (Meta atingida!) e vendas = 650 (Abaixo da meta.). A condição vendas >= 1500 deve aparecer antes de vendas >= 1000; se inverter a ordem, valores como 1.800 serão capturados pelo primeiro teste e a classificação ficará incorreta.
Operadores usados nas condições
| Operador | Significado | Exemplo |
|---|---|---|
= | Igual a | nota = 10 |
<> | Diferente de | estoque <> 0 |
> | Maior que | vendas > 1000 |
< | Menor que | estoque < 5 |
>= | Maior ou igual | vendas >= meta |
<= | Menor ou igual | nota <= 5 |
Dentro da condição de um If, = faz uma comparação. Já em uma instrução como vendas = 1200, o mesmo símbolo faz uma atribuição de valor à variável. Esse detalhe é importante para entender o VBA.
Usando And, Or e Not
É possível combinar verificações: And exige duas condições verdadeiras; Or exige pelo menos uma; e Not inverte o valor lógico. Exemplo: uma venda recebe um benefício apenas se o cliente for VIP e a compra for de pelo menos R$ 200.
Sub ExemploAndOrNot()
Dim clienteVIP As Boolean
Dim valorCompra As Currency
clienteVIP = True
valorCompra = 250
If clienteVIP And valorCompra >= 200 Then
MsgBox "Desconto especial liberado."
Else
MsgBox "Condições do desconto não atendidas."
End If
End Sub
Troque clienteVIP = True por False ou valorCompra = 250 por 150 para testar outros resultados. Atenção técnica: no VBA, And e Or não fazem avaliação de curto-circuito: os dois lados podem ser avaliados. Para evitar erros, especialmente quando uma expressão pode conter valor inválido, use verificações em blocos separados.
Projeto prático: classificar vendas automaticamente com VBA
Agora vamos aplicar o conteúdo em um problema de escritório. Você receberá uma lista de vendedores e suas vendas e criará uma macro que preenche a coluna Classificação com uma destas situações: Meta superada, Meta atingida, Abaixo da meta ou Revisar dado.
Passo 1 — Monte a tabela
Em uma planilha nova e vazia, digite exatamente estes dados nas células A1:B5. Deixe a coluna C vazia: a macro escreverá nela. Uma célula B5 vazia foi colocada de propósito para testar o tratamento de entradas inválidas.
| Célula A (Vendedor) | Célula B (Vendas em R$) | Resultado esperado na coluna C |
|---|---|---|
| Ana | 1800 | Meta superada |
| Bruno | 1200 | Meta atingida |
| Carla | 650 | Abaixo da meta |
| Diego | deixe vazio | Revisar dado |
Passo 2 — Insira o código da macro
No mesmo módulo do Editor VBA, cole o procedimento abaixo. Ele lê a coluna B e escreve apenas na coluna C, entre as linhas 1 e 5, da planilha ativa. Nunca o execute em uma planilha com dados importantes nessa coluna, porque o conteúdo de C1:C5 será substituído.
Sub Aula5_ClassificarVendas()
Dim aba As Worksheet
Dim linha As Long
Dim valor As Variant
Dim classificacao As String
Set aba = ActiveSheet
aba.Range("C1").Value = "Classificação"
For linha = 2 To 5
valor = aba.Cells(linha, "B").Value
If IsError(valor) Then
classificacao = "Revisar dado"
ElseIf Not IsNumeric(valor) Then
classificacao = "Revisar dado"
ElseIf CDbl(valor) < 0 Then
classificacao = "Revisar dado"
ElseIf CDbl(valor) >= 1500 Then
classificacao = "Meta superada"
ElseIf CDbl(valor) >= 1000 Then
classificacao = "Meta atingida"
Else
classificacao = "Abaixo da meta"
End If
aba.Cells(linha, "C").Value = classificacao
Next linha
MsgBox "Classificação concluída!", vbInformation
End Sub
Passo 3 — Execute e compare os resultados
- Volte ao Excel e mantenha ativa a planilha com a tabela.
- No Editor VBA, posicione o cursor dentro de
Aula5_ClassificarVendase pressione F5; no Excel para Windows, use Alt + F8 e selecione essa macro. - Confira se C2 mostra Meta superada, C3 Meta atingida, C4 Abaixo da meta e C5 Revisar dado.
- Experimente substituir o valor de B5 por 1600 e execute novamente. O resultado da linha Diego deverá mudar para Meta superada.
- Salve a pasta de trabalho como
.xlsmpara manter o projeto VBA.
Entenda as variáveis e as verificações do projeto
Dim aba As WorksheeteSet aba = ActiveSheet: criam uma referência para a planilha ativa. O código atua na planilha que estiver selecionada.Dim linha As Long: guarda o número da linha que está sendo examinada.Dim valor As Variant: permite receber números, células vazias e valores de erro do Excel.If IsError(valor): reconhece um erro de célula antes de tentar operações numéricas.ElseIf Not IsNumeric(valor): evita comparar texto não numérico com valores monetários.CDbl(valor): converte um valor numérico paraDoubleantes de comparar com os limites.For linha = 2 To 5: repete a classificação para quatro vendedores. Vamos estudar esse tipo de repetição com profundidade na Aula 6.aba.Cells(linha, "C").Value: escreve a classificação na célula correspondente da coluna C.
Limite do exemplo: esta macro foi construída para quatro linhas, não detecta automaticamente quantos vendedores existem e aceita textos que o Excel reconhece como números. É uma base de aprendizagem, não um sistema de produção pronto. Os resultados apresentados são os esperados pela leitura do código; a execução em instalações reais do Excel deve ser conferida no seu ambiente.
Erros comuns ao escrever condições If no VBA
Esquecer Then ou End If
Em uma condição de múltiplas linhas, é necessário usar Then na abertura e End If no fechamento. Se algum deles estiver ausente, o VBA pode exibir um erro de sintaxe ou de compilação.
Escrever Else If separado quando queria ElseIf
ElseIf (junto) é a palavra-chave para acrescentar outro teste ao mesmo bloco. Já Else seguido por um novo If inicia uma estrutura aninhada, que precisa de seu próprio encerramento. Para os exemplos desta aula, use ElseIf.
Colocar a condição mais geral primeiro
Se você escreve If vendas >= 1000 antes de ElseIf vendas >= 1500, o teste da faixa maior fica inacessível para valores acima de 1.500. Verifique sempre a ordem das condições.
Comparar números com textos ou células com erros
Antes de usar funções como CDbl em valores de células, valide se o conteúdo pode ser convertido para número. Se a célula contiver erros como #N/D, use IsError primeiro. Lembre-se de que And não impede a avaliação de uma segunda expressão potencialmente problemática.
Confundir If no VBA com a função SE do Excel
A função SE do Excel é escrita dentro de células, como =SE(B2>=1000;"Meta atingida";"Abaixo da meta") em uma instalação de Excel configurada para português do Brasil. Já o If do VBA fica dentro de procedimentos e pode decidir se uma macro deve escrever células, mostrar mensagens ou executar outras instruções.
Desafios para praticar If, ElseIf e Else
Desafio 1 — Acrescente a faixa Destaque
Modifique Aula5_ClassificarVendas para que vendas iguais ou superiores a R$ 2.000 apareçam como Destaque. Coloque essa nova condição antes da faixa Meta superada. Teste 2.500, 1.800 e 900. Resultados esperados: Destaque, Meta superada e Abaixo da meta.
Desafio 2 — Avalie uma nota escolar
Crie uma macro ClassificarNota com uma variável nota As Double. Use If e ElseIf para mostrar Aprovado quando a nota for pelo menos 7, Recuperação quando for pelo menos 5 e Reprovado abaixo disso. Antes de classificar, verifique se a nota está entre 0 e 10; caso contrário, mostre Nota inválida.
Uma possível solução do Desafio 2
Sub ClassificarNota()
Dim nota As Double
nota = 6
If nota < 0 Or nota > 10 Then
MsgBox "Nota inválida"
ElseIf nota >= 7 Then
MsgBox "Aprovado"
ElseIf nota >= 5 Then
MsgBox "Recuperação"
Else
MsgBox "Reprovado"
End If
End Sub
Com nota = 6, a mensagem esperada é Recuperação. Experimente 8, 3 e 11 para conferir os demais caminhos. Esse exemplo usa uma variável atribuída diretamente; ele não recebe a nota de uma célula ou caixa de entrada.
Perguntas frequentes sobre If no VBA
É obrigatório usar Else no VBA?
Não. Você pode escrever apenas If ... Then ... End If quando quiser executar uma tarefa somente se uma condição for verdadeira.
Posso usar vários ElseIf na mesma estrutura?
Sim. O VBA aceita diversos ElseIf na mesma estrutura de decisão. Em uma longa lista de alternativas, também vale aprender Select Case, um recurso que estudaremos adiante.
Qual é a diferença entre If e Select Case?
If é flexível para comparar diferentes expressões e intervalos. Select Case organiza alternativas relativas a uma expressão, podendo deixar certas regras mais legíveis. Não é necessário conhecer Select Case para concluir esta aula.
Como descobrir qual condição está sendo executada?
No Editor VBA do Windows, pressione F8 com o cursor dentro da macro para executar linha por linha e acompanhar o fluxo. Use F9 em uma linha de código para marcar ou remover um ponto de interrupção.
É possível executar essas macros no Excel Online?
Não. O Excel para a Web não executa VBA; para estes exercícios, utilize uma versão de Excel para computador compatível com macros.
Conclusão da Aula 5 e próxima etapa
Você aprendeu a usar If para uma condição, Else para um caminho alternativo e ElseIf para classificar diferentes situações. O projeto de vendas mostrou como combinar condições, variáveis, verificação de dados e escrita em células para resolver um problema de trabalho.
Continue estudando: releia a Aula 4 — Variáveis no VBA ou volte ao índice completo do curso gratuito. Próxima aula: Aula 6 — Laços de repetição com For Next e Do While, para automatizar listas de tamanhos maiores.
0 Comentários