VBA – Função IIF
In this Article
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.
- 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
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!
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)