VBA If, ElseIf, Else (Guia Definitivo para Declarações Condicionais If)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on April 3, 2023

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.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA