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)