Função VBA IIF

Este tutorial irá explicar como usar IIF em VBA

A função VBA IIF é semelhante ao uso da função IF no Excel. Testa se uma condição é atendida, retornando um valor (ou cálculo) se TRUE, outro valor (ou cálculo) se FALSE.

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

Sintaxe IIF

A função IFF é composta por 3 partes - o teste lógico, a parte verdadeira e a parte falsa.

  • Expressão:O teste lógico que deve ocorrer.
  • Parte Verdadeira: O resultado que será retornado se o teste lógico for TRUE.
  • Parte Falsa: O resultado que será retornado se o teste lógico for FALSE.

Escrevendo um procedimento de função IIF

123 Função GetNames (strName As String) As StringGetNames = IIf (strName = "John", "O nome é John", "O nome não é John")Função Final

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

123 Sub TestGetNamaes ()MsgBox GetNames ("John")End Sub

Se tivéssemos que executar o subprocedimento TestGetNames, ele chamaria a função GetNames e retornaria uma caixa de mensagem.

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

1234567 Função GetNames (strName As String) As StringIf (strName = "John") ThenGetNames = "O nome é John"OutroGetNames = "O nome não é John"Fim seFunção Final

Escrevemos efetivamente uma linha de código em vez de 5 linhas de código - impressionante!

Por que usar If em vez disso?

Considere o seguinte

123 Função GetNames (strName As String) As StringGetNames = IIf (strName = "John", MsgBox ("O nome é John"), MsgBox ("O nome não é John"))Função Final

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

123 Sub TestGetNames ()GetNames ("John")End Sub

Você obteria a mesma caixa de mensagem de antes, mas imediatamente depois disso - você obteria 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 uma vez que encontrou a condição como verdadeira - ela ainda executa a seção falsa também - dando-nos assim uma mensagem falsa no segunda caixa de mensagem. Se você tivesse usadoIf … Then … Else … End If - isso não teria ocorrido - a função IF executa apenas a seção TRUE ou FALSE do código - dependendo da lógica que está sendo passada para o código.

O código é 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 de função IIF, como no código abaixo, ou movendo a caixa de mensagem para o Subprocedimento de acordo com o primeiro exemplo neste artigo.

1234 Função GetNames (strName As String) As StringGetNames = IIf (strName = "John", "O nome é John", "O nome não é John")MsgBox (GetNames)Função Final

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

IIF's aninhados

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

123 Função GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Função Final

Poderíamos então chamar esta função a partir de um subprocedimento

12345 Sub FindDiscount ()Dim dblP como duplodblP = 899MsgBox ("O desconto que você pode obter é" & GetDiscount (dblP) & "%")End Sub

ou você pode chamá-lo de dentro do Excel, usando-o como um UDF (Função Definida pelo Usuário)

wave wave wave wave wave