Como Usar If Then Else no VBA – Passo a Passo
Quer aprender a usar as instruções If Then Else no VBA? Então esse guia é para você!
Se você está começando a aprender VBA ou qualquer outra linguagem de programação, então com certeza deverá aprender a usar o conceito de If Then e Else.
Essas instruções permite criar códigos para verificar uma condição e executar uma determinada ação. Confira!
Onde usar If Then Else no VBA?
Existem diferentes razões para usar as instruções If Then Else no VBA conforme veremos nos exemplos ao longo deste artigo.
No entanto, apenas para exemplificar, imagine que você tem uma grande lista de notas de alunos no Excel e deseja destacar todos os alunos que obtiveram nota 10.
Você pode fazer isso manualmente, ou seja, verificar nota por nota e destacar as notas que atendem ao critério.
A mesma lógica pode ser feita no VBA fazendo-se uso das instruções If Then e Else.
Neste guia, mostraremos através de exemplos práticos, diferentes opções para você usar If Then Else no VBA.
Sintaxe IF Then Else
O primeiro passo para você dominar o uso de IF Then Else no VBA é simplesmente conhecer a sintaxe, ou seja, como cada elemento é atribuído no VBA. Neste caso você pode usar duas opções:
IF condição Then código_verdadeiro [Else código_falso]
Outra opção é:
IF condição Then
código_verdadeiro
Else
código_falso
End IF
Note que a parte Else da primeira sintaxe está entre colchetes e é opcional. Além disso, por ser uma sintaxe de uma única linha simples, você não precisa declarar End IF.
Por outro, quando a instrução IF Then Else é dividida em várias linhas, então é necessário informar ao VBA onde termina o IF Then. Geralmente, costuma-se dividir uma instrução IF Then Else quando o código que você precisa executar é longo e se resume em várias linhas.
Caso você deixe de usar End If quando necessário, o VBA irá exibir a seguinte mensagem:
Exemplos de uso de IF Then Else no VBA
Para que você possa começar a compreender o conceito de IF Then Else no VBA, vamos usar alguns exemplos simples e práticos.
Então, suponha que você tenha a nota de um aluno na célula A2 e deseja verificar através de um código VBA se esse aluno deverá ou não ser aprovado. (para este exemplo, a nota mínima para aprovação é de 75).
Para isso, você poderá usar o seguinte código:
Sub Verifica_Nota()
If Range(“A2”).Value >= 75 Then MsgBox “Aluno aprovado!”
End Sub
Observe que o código acima possui uma única linha que verifica o valor contido na célula A2. Se o valor contido na célula A2 for maior ou igual a 75, então será exibida a mensagem “Aluno aprovado!”.
Caso contrário, ou seja, se a nota for menor do que 75, nada acontecerá.
No entanto, se você deseja exibir uma mensagem para o outro caso (se aprovado ou reprovado), então poderá usar o seguinte código:
Sub Verifica_Nota()
If Range(“A2”).Value >= 75 Then
MsgBox “Aluno aprovado!”
Else
MsgBox “Aluno reprovado!”
End If
End Sub
Observe no código acima que estamos usando IF e Else para verificar duas condições diferentes. Ou seja, quando a nota do aluno for maior ou igual a 75, a condição IF é VERDEIRA e o código abaixo será executado.
Por outro lado, se a condição do IF for FALSO, então o código passa para a parte do Else e executa o bloco contido nele.
Por fim, vale lembrar que quando usamos o código em uma única linha, não há necessidade de usar o End IF. Porém, quando o código é divido em várias linhas, é necessário usar End IF para finalizar a instrução IF.
IF Then aninhados no VBA
No exemplo citado acima, usamos uma única condição IF Then. No entanto, em muitas situações você poderá precisar verificar várias condições. Para este caso, você pode usar
- Várias declarações IF Then
- Instrução IF Then Else
- Instrução IF Then ElseIf Else
Vamos conferir cada uma dessas opções através de exemplos práticos.
Várias declarações IF Then
Usando o mesmo exemplo de nota de um aluno, se o aluno obtiver a nota menor do que 75, então o VBA deverá mostrar a mensagem ”
Porém, se a nota for maior ou igual a 75, deverá exibir a mensagem
Para isso, podemos usar o seguinte código:
Sub Verifica_Nota()
If Range(“A2”).Value >= 75 Then MsgBox “Aluno aprovado!”
If Range(“A2”).Value < 75 Then MsgBox “Aluno reprovado!”
End Sub
Note que você pode usar várias instruções IF Then, conforme mostrado acima. Mas apesar de ser funcional, isso está longe de ser um exemplo de boa codificação, pois se você tiver 100 condições, então terá que usar 100 IF Then para cada uma delas.
Além disso, todas as instruções IF Then são avaliadas e aquelas em que a condição é verdadeira, o código é executado.
Portanto, mesmo se a primeira instrução IF Then esteja correta, a segunda e as demais ainda serão avaliadas.
Instrução IF Then Else
Agora suponha que em vez de apenas exibir a mensagem “Aluno aprovado!” / “Aluno reprovado!”, tenhamos mais uma condição.
Ou seja, se o aluno tiver uma nota menor do que 75, a mensagem será “Aluno reprovado!”, se a nota for maior ou igual a 75 a mensagem deverá ser “Aluno aprovado!” e, se a nota for maior do que 85, a mensagem deverá ser “Parabéns”.
Neste caso, podemos usar o seguinte código:
Sub Verifica_Nota()
If Range(“A2”).Value < 75 Then
MsgBox “Aluno reprovado!”
Else
If Range(“A2”).Value < 85 Then
MsgBox “Aluno aprovado!”
Else
MsgBox “Parabéns!”
End If
End If
End Sub
Observe no código acima que estamos usando várias instruções IF (aninhadas IF Then) com auxílio do Else. Esse tipo de aninhamento permite verificar várias condições e executar o bloco de código relevante.
Instrução IF Then ElseIf Else
O exemplo citado anteriormente (usando IF Then Else) pode ser ainda mais otimizado usando-se a instruçõa ElseIf.
Neste caso, podemos usar o seguinte código:
Sub Verifica_Nota()
If Range(“A2”).Value < 75 Then
MsgBox “Aluno reprovado!”
ElseIf Range(“A2”).Value < 85 Then
MsgBox “Aluno aprovado!”
Else
MsgBox “Parabéns!”
End If
End Sub
Note que com o uso de ElseIf, conseguimos manter todas as condições dentro de uma única instrução IF Then, tornando o código menor e mais otimizado.
IF Then Else com AND e OR
Até aqui você aprendeu a verificar apenas uma única condição por vez usando If Then Else no VBA.
No entanto, se você tiver várias condições dependentes, então você poderá usar as instruções AND ou OR junto com as condições IF.
Confira abaixo a sintaxe para usar AND ou OR junto com IF Then
If condição_1 E condição_2 Then
Código_Verdadeiro
Else
Código_Falso
End If
No código mostrado acima, apenas quando a condição_1 e condição_2 são atendidas o código_Verdadeiro é executado. Ou seja, mesmo que uma das condições seja falsa, o VBA irá executar o código_falso.
Por outro lado, com OR, mesmo se uma das condições for verdadeira, ele executará o código_verdadeiro. Ou seja, apenas quando todas as condições são falsas, ele executa o código_falso.
Agora vamos conferir um exemplo prático de como usar as instruções AND e OR junto com IF Then Else no VBA.
Suponha que agora você tenha as notas de duas disciplinas de um aluno e deseja verificar as seguintes condições:
- Aluno reprovado: Essa mensagem deve ser exibida quando a nota é menor do que 75 em qualquer uma das disciplinas.
- Aluno aprovado: Essa mensagem deve ser exibida quando a nota maior do que 75, mas menor do que 85 em ambas as disciplinas.
- Parabéns: Essa mensagem deve ser exibida quando a nota é maior do que 85 nas duas disciplinas ou em apenas uma disciplina.
Neste caso, podemos usar o seguinte código:
Sub Verifica_Nota()
If Range(“A2”).Value < 75 Or Range(“B2”).Value < 75 Then
MsgBox “Aluno reprovado!”
ElseIf Range(“A2”).Value < 85 And Range(“B2”).Value < 85 Then
MsgBox “Aluno aprovado!”
Else
MsgBox “Parabéns!”
End If
End Sub
Usando Diferente <> com IF Then
Nos exemplos vistos anteriormente, usamos condições para verificar se um valor é igual a um determinado valor ou não.
No entanto, você pode usar códigos semelhantes para verificar quando o valor é diferente de um determinado valor.
Assim como nas funções do Excel, no VBA representamos diferente pelo sinal <>.
Confira a seguir alguns exemplos práticos.
Usando If Then Else com Loops no VBA
Agora que você já sabe como funcionam as instruções If Then Else no VBA, vale a pena aprender a utilizá-las em exemplos úteis que irão te ajudar a automatizar o seu trabalho no dia a dia.
Exemplo 1: Salvar e fechar todas as pastas de trabalho (exceto a pasta de trabalho ativa)
Suponha que você tenha muitas pastas de trabalho abertas e deseja fechar todas rapidamente, exceto a pasta de trabalho ativa. Para isso, você poderá usar o seguinte código:
Sub SalvarEFecharPastas()
Dim pasta As Workbook
For Each pasta In Workbooks
On Error Resume Next
If pasta.Name <> ActiveWorkbook.Name Then
pasta.Save
pasta.Close
End If
Next pasta
End Sub
Observe que o código acima salva e fecha todas as pastas de trabalho (exceto a pasta ativa).
Neste caso, estamos usando o loop For Next para percorrer a coleção de todas as pastas de trabalho abertas e verificar o nome usando a condição If.
Se o nome não for o mesmo da pasta de trabalho Ativa, ele será salvo e fechado.
Importante: Caso exista um código VBA em qualquer uma das pastas de trabalho e você não o salvou como .xls ou .xlsm, você verá um aviso (pois os códigos vba são perdidos quando você o salva no formato .xlsx).
Exemplo 2: Destacar células negativas
Outro exemplo interessante é a possibilidade de destacar célula com valores negativos. Então suponha que você tenha uma coluna com vários números e deseja destacar em vermelho todas as células que contém valores negativos. Isso pode ser feito usando o seguinte código:
Sub Destacar_Negativos()
Dim celula As Range
For Each celula In Selection
If celula.Value < 0 Then
celula.Interior.Color = vbRed
celula.Font.Color = vbWhite
End If
Next celula
End Sub
Note que o código mostrado acima usa o loop For Each e verifica cada célula que você selecionou. Se a célula tiver um valor negativo, será destacada em vermelho com a cor da fonte branca.
Exemplo 3: Extrair números de sequência alfanumérica
Suponha que você tenha uma sequência alfanumérica em várias células e deseja extrair os números em outra célula.
Neste caso, você pode fazer isso usando o seguinte código:
Function Extrair_Numeros(CellRef As String)
Dim Comprimento As Integer
Comprimento = Len(CellRef)
For i = 1 To Comprimento
If IsNumeric(Mid(CellRef, i, 1)) Then Resultado = Resultado & Mid(CellRef, i, 1)
Next i
Extrair_Numeros = Resultado
End Function
Observe no código acima que estamos criando uma função personalizada no Excel chamada Extrair_Numeros. Essa função poderá ser usada no Excel como uma função comum. Veja o exemplo abaixo:
Onde colocar o código VBA?
Se você é iniciante na programação VBA e ainda não sabe onde inserir os códigos citados neste tutorial, fique tranquilo! Confira o passo a passo a seguir:
1. Acesse a guia Desenvolvedor (Se a guia Desenvolvedor do seu Excel não estiver habilitada, confira aqui como habilitá-la).
2. Clique na opção Visual Basic. Isto irá abrir o editor VB.
3. No painel Project Explorer no Editor do VB, clique com o botão direito do mouse em qualquer objeto para a pasta de trabalho na qual você deseja inserir o código. Se você não vir o Project Explorer, acesse a guia Exibir e clique em Project Explorer.
4. Acesse a guia Inserir e clique em Módulo. Isso irá inserir um objeto de módulo para sua pasta de trabalho.
5. Copie e cole o código na janela do Módulo.
Importante: Se você for salvar as suas planilhas com códigos VBA para usá-los em outra ocasião, então a planilha deverá ser salva no formato XLSM (Pasta de Trabalho Habilitado para Macros do Excel).
Confira também as seguintes dicas de Excel e VBA:
- Como Aprender VBA? Um Guia para Iniciantes
- Como Habilitar Macro no Excel – Passo a Passo
- Variáveis no VBA Excel – Guia Completo
- Jogos VBA: 6 Clássicos Para Você se Divertir no Excel
E então, o que achou do guia de uso das instruções If Then Else no VBA? Ficou com alguma dúvida ou tem alguma sugestão? Deixe o seu comentário abaixo!