Como Usar Condicional IF no VBA - Guia Completo capa

Como Usar Condicional IF no VBA – Guia Completo

Declaração Condicional IF no VBA

Este artigo é um guia completo para a declaração condicional If no VBA.

Abaixo temos visão geral do que está incluso na postagem. Sendo assim, é possível navegar até a seção desejada ou ler a postagem do início ao fim.

1 Declaração If – Guia rápido
2 O que é a declaração If do VBA
3 Dados utilizados para teste
4 Formato da instrução If-Then do VBA

4.1 Recuo entre If e End If

5 Um exemplo simples de If Then
6 Usando condições com a instrução If do VBA
7 Usando ElseIf com a instrução If do VBA
8 Usando Else com a instrução If no VBA
9 Usando operadores lógicos com a instrução If no VBA

9.1 Usando If And
9.2 Usando If Or
9.3 Usando If Not

10 Função IIF

10.1 Usando IIf aninhado
10.2 If Versus IIf

11 Usando Select Case

11.1 Usando Case Is

Declaração Condicional If – Guia rápido

 Descrição Formato Exemplo
If ThenIf [condição for verdadeira] Then

    [faça isso]

End If

If nota=10 Then

    Debug.Print “Excelente”

End If

If ElseIf [condição for verdadeira] Then

    [faça isso]

Else

[faça isso]

End If

If nota=10 Then

    Debug.Print “Excelente”

Else

    Debug.Print “Tente de novo”

End If

If ElseIfIf [condição 1 for verdadeira] Then

    [faça isso]

ElseIf [condição 2 for verdadeira] Then

[faça isso]

End If

If nota=10 Then

    Debug.Print “Excelente”

ElseIf nota>5 Then

    Debug.Print “Aprovado”

ElseIf nota<=5 Then

    Debug.Print “Tente de novo”

End If

Else and ElseIfIf [condição 1 for verdadeira] Then

    [faça isso]

ElseIf [condição 2 for verdadeira] Then

[faça isso]

Else

[faça isso]

End If

If nota=10 Then

    Debug.Print “Excelente”

ElseIf nota>5 Then

    Debug.Print “Aprovado”

ElseIf nota>3 Then

    Debug.Print “Tente de novo”

Else

Debug.Print “Reprovado”

End If

If sem EndIfIf [condição for verdadeira] Then [faça isso]If valor<=0 Then valor=0

O código a seguir mostra um exemplo simples de uso da instrução If :

O código utilizado acima é:

Sub Exemplo_Funcao_If()
If Planilha1.Range("A1").Value > 5 Then
Debug.Print "O valor é maior que 5"
ElseIf Planilha1.Range("A1").Value < 5 Then
Debug.Print "O valor é menor que 5."
Else
Debug.Print "O valor é igual a 5."
End If
End Sub

O que é a declaração condicional If do VBA

A declaração If é usada para permitir que o código faça escolhas com base em um critério, quando estiver em execução.

Por exemplo, é possível aprovar apenas os alunos que possuem notas superiores a 7. Ao invés de analisar nota por nota, usa-se a declaração If para verificar as notas automaticamente.

A declaração If é usada para verificar um valor e, em seguida, executar uma tarefa com base nos resultados dessa verificação.

Dados utilizados para teste

Usaremos os seguintes dados para os exemplos de código nesta postagem:

Formato da instrução condicional If-Then no VBA

O formato da instrução If Then é a seguinte:

If [condição for verdadeira] Then 

A palavra-chave If é seguida por uma condição, e depois por uma palavra-chave Then.

Toda vez que se usa uma instrução If Then, deve ser usada também a instrução End If correspondente. Quando a condição é avaliada como verdadeira, todas as linhas entre If Then e End If são processadas.

Para tornar o código mais legível, é bom recuar as linhas entre as instruções If Then e End If.

Recuo entre If e End If

Recuar significa simplesmente mover uma linha de código para a direita. A regra geral é recuar entre instruções de início e fim, como:

Sub ----> End Sub

If Then ----> End If

If  Then ----> Else If ----> Else ----> End If

For ----> Next

Do While ----> Loop

Select Case ----> End Case

Para recuar o código, realçe as linhas e pressione a tecla Tab.  Pressionar Shift + Tab irá recuar o código, ou seja, mova-o uma guia para a esquerda.

é possível fazer isso também, usando os ícones da barra de ferramentas do Visual Basic:

Temos abaixo, um exemplo de código recuado:

Um exemplo simples de condicional If Then

O código a seguir imprime os nomes de todos os alunos com notas maiores que 5 em português:

E o resultado é o seguinte:

Teste o código você mesmo:

' https://engenheiradoexcel.com/
Sub Imprimir_Notas()
Dim i As Long
' Irá percorrer a coluna Notas
For i = 2 To 11
' Checa se a nota é maior que 5
If Planilha1.Range("C" & i).Value > 5 Then
' Imprimir o nome do aluno na janela Imediata (Ctrl + G)
Debug.Print Planilha1.Range("A" & i).Value & " " & Planilha1.Range("B" & i).Value
End If
Next
End Sub

Brinque com este exemplo. Verifique o valor e o sinal e veja como os resultados mudam.

Usando condições com a instrução If do VBA

O trecho de código entre as palavras-chave If e Then é chamado de condição. Uma condição é uma declaração avaliada como verdadeira ou falsa. Elas são usadas principalmente com instruções Loops e If. Quando se cria uma condição, os sinais mais comuns a serem usados são: >, <, <>,>=, <=, =.

A seguir, temos alguns exemplos de condições:

 
 Condição É verdadeira quando
x<5x é menor que 5
x<=5x é menor ou igual a 5
x>5x é maior que 5
x>=5x é maior ou igual a 5
x=5x é igual a 5
x<>5x é diferente da 5
x>5 e x<10 x é maior que 5 e menor que 10
 x=2 ou x>10x é igual a 2 ou menor que 10
 Range(“A1”) = “Érica” a célula A1 conter o texto: Érica
Range(“A1”) <> “Érica” a célula A1 não conter o texto: Érica

Note que a expressão x = 5 nesta situação, é respresentada como uma condição e não como declaração de variável, que é usada quando se deseja executar uma tarefa.

Leia sobre como declarar variáveis no VBA aqui.

Quando o sinal de “igual” é usado em uma condição, significa: ” o lado esquerdo é igual ao lado direito”.

A tabela a seguir demonstra como o sinal de igual é usado em condições e atribuições:

 Uso do sinal de “igual”  Tipo de Instrução  Significado
Loop Until x = 5Condiçãox é igual a 5
Do While x = 5Condição x é igual a 5
If x = 5 ThenCondição x é igual a 5
For x = 1 To 5Tarefa Defina o valor x como 1, depois como 2, etc
x = 5TarefaDefina o valor x como 5
b = 6 = 5Tarefa e CondiçãoAtribua b ao resultado da condição 6 = 5
x = MyFunc(5,6)TarefaAtribua x ao valor retornado da função

Usando ElseIf com a instrução condicional If do VBA

A instrução ElseIf permite escolher entre mais de uma opção. No exemplo a seguir, imprimimos as notas quesão classificadas como “Excelente” e “Ótimo”.

O importante é entender que a ordem importa. Perceba:

  • A condição If é verificada primeiro.
  • Se a condição for verdadeira, a mensagem “Excelente” é impressa e a instrução If termina.
  • Se a condição for falsa, o código passa para o próximo ElseIf e a condição é verificada novamente.

Vamos agora, trocar o If e ElseIf do último exemplo. O código agora fica da seguinte forma:

Nesse caso, é verificado primeiro um valor superior a 7. Note que, não será reportado a frase “Excelente” porque se o valor da variavel “nota” for superior a 8, será atendido na primeira condição If.

Para evitar esse tipo de problema, devemos usar duas condições. Isso ajuda a indicar exatamente o que se está procurando para não gerar confusão. O exemplo abaixo mostra como usá-las.

É possível usar quantas instruções ElseIf quiser para expandir o código original.

Usando Else com a instrução condicional If no VBA

A instrução Else é usada como uma captura geral. Significa basicamente “se nenhuma condição for verdadeira, faça isso”. No exemplo de código anterior, não incluímos uma declaração de impressão para uma nota classificada como “Péssimo”. Isso é feito adicionando o Else.

Portanto, se a condição não for atendida, como resultado teremos a mensagem”Péssimo”.

Temos abaixo um código que analisa os dados de amostra e imprimi o nome do aluno com sua classificação com relação as notas:

Teste o código você mesmo:

' https://engenheiradoexcel.com/
Sub Exemplo_Else()
' selecione a ultima linha
Dim pri_Linha As Long, ult_Linha As Long
pri_Linha = 2
ult_Linha = Planilha1.Cells(Planilha1.Rows.Count, 1).End(xlUp).Row

Dim i As Long, nota As Long
Dim Clas As String
' Percorre a coluna de notas
For i = pri_Linha To ult_Linha
nota = Planilha1.Range("C" & i).Value
If nota >= 8 Then
Clas = "Excelente"
ElseIf nota >= 7 Then
Clas = "Ótimo"
ElseIf nota >= 5 Then
Clas = "Bom"
ElseIf nota >= 4 Then
Clas = "Ruim"
Else
' Para todas as outras notas
Clas = "Péssimo"
End If
' Escreva a classificação na coluna E
Planilha1.Range("E" & i).Value = Clas
Next
End Sub

O resultado é o seguinte:

Usando operadores lógicos com a instrução condicional If no VBA

É possivel descrever mais de uma condição dentro da instrução If. Isso é feito através das palavras-chave And e Or.

Observe os dados de amostra novamente. Agora, deseja-se imprimir todos os alunos que superaram as notas de 5 a 8.
Neste caso usaremos And para adicionar uma condição extra. O código diz: se a nota for maior ou igual a 5 e menor que 7, imprima o nome do aluno.

O código trabalhado a acima é:

' https://engenheiradoexcel.com/
Sub Exemplo_And()
Dim i As Long, nota As Long
For i = 2 To 11
' Armazena a nota para o aluno atual
nota = Planilha1.Range("C" & i).Value

' Checa se a nota é maior que 5 e menor que 7
If nota >= 5 And nota < 8 Then
' Imprime o nome e o sobrenome na janela de verificação imediata (Ctrl+G)
Debug.Print Planilha1.Range("A" & i).Value & Planilha1.Range("B" & i).Value
End If
Next
End Sub

Resultado:

No próximo exemplo, deseja-se listar os alunos que fizeram as disciplinas História ou Português:

Código:

' https://engenheiradoexcel.com/
Sub Exemplo_Or()
' Obter o intervalo de dados
Dim rg As Range
Set rg = Planilha1.Range("A1").CurrentRegion
Dim i As Long, disciplina As String

' Leia os dados
For i = 2 To rg.Rows.Count
' Selecione a disciplina
disciplina = rg.Cells(i, 4).Value
' Checar se a disciplina é História ou Português
If disciplina = "História" Or disciplina = "Português" Then
' Imprimir o primeiro nome e a disciplina na janela de verificação imediata (Ctrl+G)
Debug.Print rg.Cells(i, 1).Value & " " & rg.Cells(i, 4).Value
End If
Next
End Sub

Resultado:

Usando If And

O AND funciona da seguinte maneira:

 Condição 1  Condição 2  Resultado 
 Verdadeiro Verdadeiro Verdadeiro
 Verdadeiro Falso Falso
 Falso Verdadeiro Falso
 Falso Falso Falso

Note que a função AND só é verdadeira quando todas as condições são verdadeiras.

Usando If Or

A palavra-chave OR funciona da seguinte maneira:

 Condição 1  Condição 2  Resultado 
 Verdadeiro Verdadeiro Verdadeiro
 Verdadeiro FalsoVerdadeiro
 Falso VerdadeiroVerdadeiro
 Falso Falso Falso

Note que a função OR só é falsa quando todas as condições são falsas.

Usar AND e OR juntos pode dificultar a leitura do código e ocasionar erros. Por isso, usar parênteses pode tornar as condições mais claras.

Teste o código você mesmo:

' https://engenheiradoexcel.com/
Sub Exemplo_Or_e_And()
Dim disciplina As String, nota As Long
disciplina = "História"
nota = 5
If (disciplina = "Português" Or disciplina = "História") And nota >= 6 Then
Debug.Print "Verdadeiro"
Else
Debug.Print "Falso"
End If
End Sub

Usando If Not

Além dos operadores AND e OR existe também o operador NOT, que retorna o resultado oposto da condição.

 Condição   Resultado 
 Verdadeiro Falso
FalsoVerdadeiro

As duas linhas de código a seguir são equivalentes:

Assim como:

e também:

Colocar a condição entre parênteses facilita a leitura do código. Observe:

Um uso comum de Not é verificar se um objeto foi definido. Temos aqui uma planilha declarada:

Desaja-se verificar se a MinhaPlanilha é válida antes de usá-la. Então fazemos assim:

Função IIF

O VBA tem uma função semelhante à função SE do Excel, que é usada da seguinte maneira:

= SE (F2 = ””, ””, F1 / F2)

Sua sintaxe é:

= SE (teste lógico; [valor_se_verdadeiro], [valor_se_falso]).

Para ler sobre função SE no Excel clique aqui!

No VBA existe a instrução IIf, que funciona da mesma maneira. Veja um exemplo: No código a seguir, é usado IIf para verificar o valor da variável “num”. Se o valor for maior que 10, imprimimos verdadeiro, caso contrário, imprimimos falso:

No próximo exemplo, deseja-se imprimir a mensagem “Aprovado” ou “Reprovado” de acordo com a nota de cada aluno. No primeiro trecho de código, é usado a instrução If do VBA:

Teste o código você mesmo:

Sub Exemplo_Checar_Nota()
Dim i As Long, nota As Long
For i = 2 To 11

' Armazenar nota para o aluno atual
nota = Planilha1.Range("C" & i).Value
' Verificar se o aluno foi aprovado ou reprovado
If nota >= 4 Then
' Escreva o nome na coluna F
Planilha1.Range("E" & i) = "Aprovado"
Else
Planilha1.Range("E" & i) = "Reprovado"
End If
Next
End Sub

No próximo trecho, é usado a função IIf. Note que o código é muito mais limpo:

O resultado é o seguinte:

Código:

' Descrição: Usa-se a função IIF para checar as notas.
' Planilha: Planilha1
' Saída: Resultado impresso na janela de verificação imediata (Ctrl + G)
' https://engenheiradoexcel.com/
Sub Exemplo_Checar_Nota_IIF()
' Obter o intervalo de dados
Dim rg As Range
Set rg = Planilha1.Range("A1").CurrentRegion

Dim i As Long, nota As Long, result As String
' Percorra a coluna com as notas
For i = 2 To rg.Rows.Count
' Armazena nota para o aluno atual
nota = rg.Cells(i, 3).Value

' Verifique se o aluno foi aprovado ou reprovado
result = IIf(nota >= 4, "Aprovado", "Reprovado")

' Imprimir o nome e o resultado
Debug.Print rg.Cells(i, 1).Value, result
Next
End Sub

A função IIf é muito útil para casos simples em que se lida com duas opções possíveis.

Usando IIf aninhado

É possível no VBA, aninhar instruções IIf como no Excel. Isso significa usar o resultado IIf com outro. Vamos adicionar outro tipo de resultado aos exemplos anteriores. No caso, vamos imprimir: Aprovadissimo, Aprovado ou Reprovado para cada aluno.

Resultado:

Teste o código você mesmo:

' https://engenheiradoexcel.com/
Sub Exemplo1_Checar_Aprovação()
Dim i As Long, nota As Long
For i = 2 To 11
' Armazena nota para o aluno atual
nota = Planilha1.Range("C" & i).Value

If nota >= 7 Then
Planilha1.Range("E" & i).Value = "Aprovadissimo"
ElseIf nota >= 4 Then
' Escrever na coluna F
Planilha1.Range("E" & i).Value = "Aprovado"
Else
Planilha1.Range("E" & i).Value = "Reprovado"
End If
Next
End Sub

Usando IIf aninhados fica assim:

Resultado:

Código:

'Descrição: Usando a função IIF aninhada para checar nota
'Planilha: Planilha1
'Saída: o resultado é impresso na janela de verificação imediata (Ctrl + G)
' https://engenheiradoexcel.com/
Sub Exemplo2_Checar_Aprovação()
' Obter o intervalo de dados
Dim rg As Range
Set rg = Planilha1.Range("A1").CurrentRegion

Dim i As Long, nota As Long, result As String
' Percorra a colunas de notas
For i = 2 To rg.Rows.Count
nota = rg.Cells(i, 3).Value
result = IIf(nota >= 7, "Aprovadissimo", IIf(nota >= 4, "Aprovado", "Reprovado"))

Debug.Print nota, result
Next i
End Sub

Usar a função IIf aninhada é uma boa opção em casos simples como este apresentado acima.

If  Versus IIf

E ai, qual dessas duas funções é a melhor?

Repare que, a função IIf é mais curta e mais limpa. No entanto, se as condições se complicarem, é melhor usar a instrução If. Uma desvantagem do IIf é o fato de ela não ser tão conhecida, portanto outros usuários podem não entendê-la, assim como o código escrito com uma instrução If normal.

Além disso, como discutimos na última seção, o IIf sempre avalia as partes Verdadeiro e Falso, portanto, se estiver lidando com muitos dados, a instrução If é mais rápida.

Então, eu recomendo trabalhar com a função IIf quando a leitura for simples e não exigir chamadas de outras função. Para casos mais complexos, use a instrução If normal.

Usando Select Case

A instrução Select Case é uma maneira alternativa de escrever uma declaração If com muitas outras referências. Você encontrará esse tipo de instrução nas linguagens de programação mais populares, onde é chamada de instrução Switch. Por exemplo, Java, C #, C ++ e Javascript possui uma instrução switch.

O formato é:

Observe o exemplo que trabalhamos anteriormente:

A seguir temos o mesmo código usando uma instrução Select Case. Note que usamos “Case 8 a 10” em vez de “nota>= 8 e nota <= 10”.

Teste o código você mesmo:

' https://engenheiradoexcel.com/
Sub Exemplo_Select_Case()

' selecione a primeira e última linha
Dim pri_Linha As Long, ult_Linha As Long
pri_Linha = 2
ult_Linha = Cells(Cells.Rows.Count, 1).End(xlUp).Row

Dim i As Long, nota As Long
Dim Clas As String
' Percorra a coluna de notas
For i = pri_Linha To ult_Linha
nota = Planilha1.Range("C" & i).Value
' Classificação das notas
Select Case nota
Case 8 To 10
Clas = "Excelente"
Case 7 To 8
Clas = "Ótimo"
Case 5 To 7
Clas = "Bom"
Case 4 To 5
Clas = "Ruim"
Case Else
' Para todas as outras notas
Clas = "Péssimo"
End Select

' Escreva a classificação na coluna E
Planilha1.Range("E" & i).Value = Class
Next
End Sub

Usando Case Is

É possível reescrever a instrução Select Case no mesmo formato que o ElseIf . Neste caso usa-se Is com Case chamado de Case Is.

Podemos usar Is para verificar vários valores. No código a seguir, estamos verificando se as notas são iguais a 5, 7 ou 9. Observe:

É isso ai pessoal. Espero ter ajudado!

Conclusão

Neste artigo vimos como trabalhar com as funções If Then, ElseIfElse, operadores lógicos como AND, OR e NOT aninhada com a função If, Iff, Select Case e Case Is no VBA.

Recomendo fortemente que você tome coragem de repetir todo o passo-a-passo. Eu penso que praticar é a melhor maneira de aprender e, embora pareça simples, é preciso se acostumar a navegar entre as telas para que no futuro você possa se tornar um usuário avançado.

Eu sei que não é comum ler um artigo deste, como tutorial, e repetir para aprender, mas recomendo fortemente que você tome coragem de repetir todo o passo-a-passo. Desenvolva seu próprio método, veja o que te ajuda, implemente-o para se tornar fluente na ferramenta Excel VBA.

O site deste pessoal aqui foi referência para este artigo. O site é muitoooo bacana com várias dicas legais de programação, mas infelizmente o conteúdo está em inglês, o que não deixa de ser uma boa referência para quem conseguir acompanhar. Eu recomendo.

Por fim, termino aqui este artigo, mas deixo linkado abaixo, outros conteudos relacionados a VBA para que você fique ligado! Até a próxima.

Como Automatizar Planilha com VBA no Excel com EXEMPLOS

Como Criar Macro no Excel – A FORMA MAIS FÁCIL

Como Declarar Variáveis no VBA

Encontre seus erros no VBA com DEBUG

Como Ler e Escrever em Células – Automatize sua planilha já

Como Selecionar Célula de Outra Planilha com VBA no Excel

Como Comentar Código no VBA Excel – Uma ou mais linhas

Como Usar Caixa de Texto para Ler Dados – Excel VBA InputBox

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *