VBA – Função IIF

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on September 6, 2023

Este tutorial explicará como usar a função IIF no VBA.

A função IIF do VBA é semelhante ao uso da função IF no Excel. Ela testa se uma condição é atendida, retornando um valor (ou cálculo) se for VERDADEIRO e outro valor (ou cálculo) se for FALSO.

É semelhante à declaração If do VBA, muitos a consideram um atalho para o uso desse método, pois você só precisa escrever uma linha de código para obter o resultado desejado em vez de usar uma rotina If..Then..Else..End If. Entretanto, ele precisa ser usado corretamente, pois pode causar problemas em seu código.

Sintaxe do IIF

A função IFF é composta de três partes: o teste lógico, a parte verdadeira e a parte falsa.

sintaxe iif vbe

  • Expression (Expressão): O teste lógico que deve ser realizado.
  • TruePart (Parte verdadeira): O resultado que será retornado se o teste lógico for VERDADEIRO.
  • FalsePart (Parte falsa): O resultado que será retornado se o teste lógico for FALSO.

Escrevendo um Procedimento de Função IIF

Function ObterNomes(strNome As String) As String
 ObterNomes= IIf(strNome = "John", "O nome é John", "O nome não é John")
End Function

Na função acima, podemos usar um subprocedimento para testar se a variável que passamos para a função é a string “John”

Sub TestarObterNomes()
 MsgBox ObterNomes("John")
End Sub

Se executássemos o subprocedimento TestGetNames, ele chamaria a função GetNames e retornaria uma caixa de mensagem

resposta nome john

Se, em vez disso, tivéssemos usado o método If, o código teria a seguinte aparência:

Function ObterNomes(strNome As String) As String
    If(strNome = "John") Then
       ObterNomes = "O nome é John"
    Else
       ObterNomes = "O nome não é John"
    End If
End Function

Na prática, escrevemos uma linha de código em vez de 5 linhas de código – impressionante!

Por Que Usar If Em Vez Disso?

Considere o seguinte

Function ObterNomes(strNome As String) As String
    ObterNomes = IIf(strNome = "John", MsgBox("O nome é John"), MsgBox("O nome não é John"))
End Function

Agora, se você executar o seguinte Subprocedimento para chamar sua função

Sub TestarObterNomes()
    ObterNomes("John")
End Sub

Você veria a mesma caixa de mensagem de antes, mas imediatamente depois disso – você veria a próxima caixa de mensagem!

resposta nome nao john

A função IIF executa as seções TRUE e FALSE da linha de código – ela não sai do código depois de descobrir que a condição é verdadeira – ela ainda executa a seção false também – o que nos dá uma mensagem falsa na segunda caixa de mensagem. Se você tivesse usado If..Then..Else..End If – isso não teria ocorrido – a função IF executa somente a seção TRUE ou FALSE do código – dependendo da lógica que está sendo passada para o código.

O código foi mal projetado (propositalmente!) com as caixas de mensagem sendo mantidas dentro da linha de código em que a instrução IIF está, em vez de depois do código ou na sub-rotina. Como a função IIF executa as seções TRUE e FALSE da instrução, ambas as mensagens são retornadas.

Poderíamos corrigir esse erro movendo a caixa de mensagem para abaixo da linha da função IIF, como no código abaixo, ou movendo a caixa de mensagem para o Subprocedimento, conforme o primeiro exemplo deste artigo.

Function ObterNomes(strNome As String) As String
    ObterNomes = IIf(strNome = "John", "O nome é John", "O nome não é John")
    MsgBox (ObterNomes)
End Function

Se você for cuidadoso ao escrever seu código, a função IIF pode economizar muitas linhas de código e digitação extra!

IIFs Aninhados

Podemos aninhar a função IIF de forma semelhante ao aninhamento da função IF, mas, mais uma vez, tudo é feito em uma única linha.

Function ObterDesconto(dblPreco As Double) As Double
    ObterDesconto = IIf(dblPreco >= 500, 10, IIf(dblPreco >= 250, 5, IIf(dblPreco >= 100, 2.5, 0)))
End Function

Poderíamos então chamar essa função em um subprocedimento

Sub EncontrarDesconto()
    Dim dblP As Double
    dblP = 899
    MsgBox ("O desconto que você pode obter é " & ObterDesconto(dblP) & "%")
End Sub

ou você pode chamá-la de dentro do Excel, usando-a como uma UDF (User Defined Function, função definida pelo usuário)

obter desconto udf

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