VBA If, ElseIf, Else (Guia Definitivo para Declarações Condicionais If)
In this Article
VBA Declaração Condicional If
If Then
Declarações condicionais If em VBA permitem testar se as expressões são VERDADEIRAS ou FALSAS, executando códigos diferentes com base nos resultados.
Vejamos um exemplo simples:
If Range("a2").Value > 0 Then Range("b2").Value = "Positivo"
Isto testa se o valor na Célula A2 é maior que 0. Se assim for, o valor da Célula B2 é igual a “Positivo”
Nota: Ao testarmos as condições, usaremos os operadores de comparação=, >, <, <>, <=, >=. Discutiremos detalhadamente mais adiante no artigo.
Aqui está a sintaxe para uma simples declaração If de uma linha:
If [expressão_teste] then [ação]
Para facilitar a leitura, você pode usar um caractere de Continuação de Linha (underscore) para expandir as Declarações If para duas linhas (como fizemos na figura acima):
If [expressão_teste] then _
[ação]
If Range("a2").Value > 0 Then _
Range("b2").Value = "Positivo"
End If
A Declaração IF de “linha única” acima funciona bem quando você estiver testando uma condição. Mas como suas declarações IF se tornam mais complicadas com múltiplas condições, você precisará adicionar um “End IF” ao final da declaração IF:
If Range("a2").Value > 0 Then
Range("b2").Value = "Positivo"
End If
Aqui está a sintaxe:
If [expressão_teste] then
[ação]
End If
O End If significa o fim da declaração IF.
Agora vamos acrescentar um ElseIF:
ElseIF – Condições Múltiplas
O ElseIf é adicionado a uma declaração If existente. ElseIf testa se uma condição é atendida SOMENTE se as condições anteriores não foram atendidas.
No exemplo anterior, testamos se um valor de célula é positivo. Agora também testaremos se o valor da célula é negativo com um ElseIf:
If Range("a2").Value > 0 Then
Range("b2").Value = "Positivo"
ElseIf Range("a2").Value < 0 Then
Range("b2").Value = "Negativo"
End If
Você pode usar múltiplas ElseIfs para testar múltiplas condições:
Sub If_Multiplas_Condicoes()
If Range("a2").Value = "Gato" Then
Range("b2").Value = "Miau"
ElseIf Range("a2").Value = "Cachorro" Then
Range("b2").Value = "Au"
ElseIf Range("a2").Value = "Pato" Then
Range("b2").Value = "Quack"
End If
End Sub
Agora vamos acrescentar um Else:
Else
O ELSE funcionará se nenhuma outra condição anterior tiver sido cumprida.
Terminaremos nosso exemplo usando um Else para indicar que se o valor da célula não for positivo ou negativo, então deve ser zero:
If Range("a2").Value > 0 Then
Range("b2").Value = "Positivo"
ElseIf Range("a2").Value < 0 Then
Range("b2").Value = "Negativo"
Else
Range("b2").Value = "Zero"
End If
If-Else
O tipo mais comum de declaração If é um simples If-Else:
Sub If_Else()
If Range("a2").Value > 0 Then
Range("b2").Value = "Positivo"
Else
Range("b2").Value = "Não Positivo"
End If
End Sub
IFs aninhados
Você também pode “aninhar” as declarações IF uma dentro da outra.
Sub IFs_Aninhados()
If Range("a2").Value > 0 Then
Range("b2").Value = "Positivo"
Else
If Range("a2").Value < 0 Then
Range("b2").Value = "Negativo"
Else
Range("b2").Value = "Zero"
End If
End If
End Sub
IF – Or, And, Xor, Not
A seguir, discutiremos os operadores lógicos: Or, And, Xor, Not.
If Or
O operador OR testa se pelo menos uma condição for cumprida.
O seguinte código testará se o valor do intervalo A2 é inferior a 5.000 ou superior a 10.000:
If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Then
Range("b2").Value = "Fora do Intervalo"
End If
Você pode incluir várias ORs em uma linha:
If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Or Range("a2").Value = 9999 Then
Range("b2").Value = "Fora do Intervalo"
End If
Se você vai usar vários ORs, é recomendável usar um caractere de continuação de linha para tornar seu código mais fácil de ler:
If Range("a2").Value < 5000 Or _
Range("a2").Value > 10000 Or _
Range("a2").Value = 9999 Then
Range("b2").Value = "Fora do Intervalo"
End If
If And
O operador AND permite que você teste se TODAS as condições são cumpridas.
If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 Then
Range("b2").Value = "Dentro do Intervalo"
End If
If Xor
O operador Xor permite que você teste se exatamente uma condição for atendida. Se nenhuma das condições for satisfeita, Xor retornará FALSO. Se duas ou mais condições forem satisfeitas, Xor também retornará falso.
Raramente vi Xor ser usado na programação VBA.
If Not
O Operador NOT é usado para converter FALSO em VERDADEIRO ou VERDADEIRO em FALSO:
Sub Operador_Not()
MsgBox Not (True)
End Sub
Note que o operador NOT requer parênteses ao redor da expressão para mudar.
O operador NOT também pode ser aplicado a declarações IF:
If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) Then
Range("b2").Value = "Fora do intervalo"
End If
Comparações If
Ao fazer comparações, você normalmente utilizará um dos operadores de comparação:
Comparação Operador | Explicação |
---|---|
= | Igual a |
<> | Não Igual a |
> | Maior do que |
>= | Maior ou Igual a |
< | Menor do que |
<= | Menor ou Igual a |
Entretanto, você também pode usar qualquer expressão ou função que resulte em VERDADEIRO ou FALSO
If – Função Booleana
Ao construir expressões para Declarações IF, você também pode usar qualquer função que gere VERDADEIRO ou FALSO. O VBA tem algumas destas funções:
Função | Descrição |
---|---|
IsDate | Retorna VERDADEIRO se a expressão for uma data válida |
IsEmpty | Verifica se há células em branco ou variáveis indefinidas |
IsError | Verifica erro de valores |
IsNull | Verifica se o valor é NULO |
IsNumeric | Verifica se o valor é numérico |
Eles podem ser chamados desta forma:
If IsEmpty(Range("A1").Value) Then MsgBox "Célula Vazia"
O Excel também tem muitas funções adicionais que podem ser chamadas usando a função WorksheetFunction. Aqui está um exemplo da função Excel ÉTEXTO:
If Application.WorksheetFunction.IsText(Range("a2").Value) Then _
MsgBox "Célula é texto"
Você também pode criar suas próprias Funções Definidas pelo Usuário (User Defined Functions – UDFs). Abaixo criaremos uma função booleana simples que retorna VERDADEIRO. Em seguida, chamaremos essa função em nossa declaração IF:
Sub Funcao_IF()
If FuncaoVerdadeira Then
MsgBox "Verdadeiro"
End If
End Sub
Function FuncaoVerdadeira() As Boolean
FuncaoVerdadeira= True
End Function
Comparação de texto
Você também pode comparar textos, semelhante à comparação de números:
Msgbox "a" = "b"
Msgbox "a" = "a"
Ao comparar o texto, você deve estar atento ao tipo de letra maiúsculas ou minúsculas (Case). Por padrão, a VBA considera como diferentes se as letras estão em maiúsculo ou minúsculo. Em outras palavras, “A” <> “a”.
Se você quiser que a VBA ignore o tipo de letra, você deve adicionar a declaração Option Compare Text (opção comparar texto) à parte superior de seu módulo:
Option Compare Text
Depois de fazer essa declaração “A” = “a”:
Option Compare Text
Sub If_Text()
MsgBox "a" = "A"
End Sub
VBA If Like
O Operador Like do VBA permite que você faça comparações inexatas de texto. Clique no link “Operador Like” para saber mais, mas mostraremos um exemplo básico abaixo:
Dim strNome as String
strNome = "Sr. Carlos"
If strNome Like "Sr*" Then
MsgBox "Verdadeiro"
Else
MsgBox "Falso"
End If
Aqui estamos usando um asterisco “*” caractere curinga. O * representa qualquer número de quaisquer caracteres. Portanto, a declaração acima retornará VERDADEIRO. O operador Like é uma ferramenta extremamente poderosa, mas muitas vezes subutilizada para lidar com textos.
If Loops
Os loops em VBA permitem que você repita ações. Combinar IF-ELSEs com Loops é uma ótima maneira de processar rapidamente muitos cálculos.
Continuando com nosso exemplo Positivo / Negativo, adicionaremos um For Each Loop para fazer loop através de um intervalo de células:
Sub Loop_com_IF()
Dim Cell as Range
For Each Cell In Range("A2:A6")
If Cell.Value > 0 Then
Cell.Offset(0, 1).Value = "Positivo"
ElseIf Cell.Value < 0 Then
Cell.Offset(0, 1).Value = "Negativo"
Else
Cell.Offset(0, 1).Value = "Zero"
End If
Next Cell
End Sub
Exemplos de IF Else
Agora vamos rever alguns exemplos mais específicos.
Verifique se a Célula Está Vazia
Este código irá verificar se uma célula está vazia. Se estiver vazia, irá ignorar a célula. Se não estiver vazia, ele irá repetir o valor da célula para a célula à direita:
Sub Se_Celula_Vazia()
If Range("a2").Value <> "" Then
Range("b2").Value = Range("a2").Value
End If
End Sub
Verifique se a Célula Contém Texto Específico
A função Instr testa se uma sequência de texto for encontrada em outra sequência. Use-a com uma declaração If para verificar se uma célula contém um texto específico:
If Instr(Range("A2").value,"texto") > 0 Then
Msgbox "Texto encontrado"
End If
Verifique se a Célula Contém Texto
Este código irá testar se uma célula é texto:
Sub Se_Celula_Eh_Texto()
If Application.WorksheetFunction.IsText(Range("a2").Value) Then
MsgBox "Célula é Texto"
End If
End Sub
If Goto
Você pode usar o resultado de uma declaração If para “Ir para” outra seção do código.
Sub SeIrPara ()
If IsError(Cell.value) Then
Goto Pular
End If
'Algum Código
Pular:
End Sub
Eliminar Linha se a Célula Estiver em Branco
Usando IFs e loops você pode testar se uma célula está em branco e, em caso afirmativo, apagar a linha inteira.
Sub ApagarLinhaCelulaEmBranco()
Dim Cell As Range
For Each Cell In Range("A2:A10")
If Cell.Value = "" Then Cell.EntireRow.Delete
Next Cell
End Sub
If MessageBox Sim / Não
Com as caixas de mensagens VBA você pode pedir ao usuário para selecionar entre várias opções. A Caixa de Mensagens Sim/Não pede ao usuário para selecionar Sim ou Não. Você pode adicionar uma Caixa de Mensagens Sim/Não a um procedimento para perguntar ao usuário se ele gostaria de continuar executando o procedimento ou não. Você lida com a entrada do usuário usando uma declaração IF.
Aqui está a Caixa de Mensagens de Sim/Não na prática:
Sub MsgBoxVariavel()
Dim resposta As Integer
resposta = MsgBox("Você deseja continuar?", vbQuestion + vbYesNo)
If resposta = vbYes Then
MsgBox "Sim"
Else
MsgBox "Não"
End If
End Sub
VBA If, ElseIf, Else no Access VBA
As funções If, ElseIf e Else funcionam exatamente da mesma forma em Access VBA e em Excel VBA.
Você pode usar uma declaração IF para verificar se há registros em um Recordset.