VBA – Múltiplas Instruções If (Aninhadas)
In this Article
Este tutorial mostrará como usar instruções If aninhadas no VBA.
As instruções If permitem que você teste uma única condição no VBA para ver se a condição é verdadeira ou falsa e, dependendo da resposta, o código se moverá na direção da declaração verdadeira ou da declaração falsa.
Uma Única Instrução IF
Sub TesteIf()
Dim x as Integer
x = 10
If x = 10 then
'se x for 10, a condição será verdadeira
MsgBox "x é 10"
Else
'Se x não for 10, a condição será falsa
Msgbox "x não é 10"
End If
End Sub
Explicação Sobre IFs Aninhados
Um If aninhado permite que você coloque várias condições DENTRO de cada uma das instruções Verdadeiro e/ou Falso do If original.
Sub TesteIfAninhado()
Dim x as Integer
Dim y as Integer
Dim z as Integer
x = 10
y = 9
z = 8
If x = 10 Then
'Se x for 10, a condição é verdadeira, portanto, teste para y
If y = 9 Then
MsgBox "y é 9"
Else
'Se y não for 9, a condição será falsa
Msgbox "y não é 9"
End If
Else
'Se x não for 10, então a condição é falsa, então vamos testar z
If z = 8 Then
MsgBox "z é 8"
Else
'Se z não for 8, a condição será falsa
Msgbox "z não é 8"
End If
'Outro End If é necessário para fechar o if original
End If
End Sub
Indentar o código quando você o escreve é sempre uma boa prática, pois facilita a leitura e o acompanhamento do código quando você precisa voltar a ele em algum momento ou quando outro programador precisa lê-lo.
Também poderíamos criar uma função projetada pelo usuário (UDF) e chamar os valores de algumas células do Excel para a função usando parâmetros.
Function ObterIf(x as Integer, y as Integer, z as Integer) as String
If x = 10 Then
'Se x for 10, a condição é verdadeira, portanto, teste para y
If y = 9 Then
ObterIf = "y é 9"
Else
'Se y não for 9, a condição será falsa
ObterIf = "y não é 9"
End If
Else
'Se x não for 10, então a condição é falsa, então vamos testar z
If z = 8 then
ObterIf="z é 8"
Else
'Se z não for 8, a condição será falsa
ObterIf="z não é 8"
End If
'Outro End If é necessário para fechar o if original
End If
End Function
Exemplo Prático de If Aninhado
Considere a seguinte função:
Function ObterDesconto(dblPrice As Double) As Double
If dblPrice >= 1000 Then
'Se o preço for maior que 1.000, atribua um desconto
If dblPrice >= 2000 Then
'se for maior que 2000, dê 10% de desconto
ObterDesconto = dblPrice * 0.1
Else
'caso contrário, dê 5% de desconto
ObterDesconto = dblPrice * 0.05
End If
'se o preço não for maior que 1000
Else
'Se for maior que 500, dê 2,5% de desconto
If dblPrice >= 500 Then
ObterDesconto = dblPrice * 0.025
Else
'caso contrário, não haverá desconto
ObterDesconto = 0
End If
'Outro End If é necessário para fechar o if original
End If
End Function
Usando essa função em uma planilha do Excel, podemos testar para ver o preço total de um pedido e aplicar descontos diferentes dependendo desse total.
Uso de ElseIf
A função ElseIf nos permite simplificar o código, pois ela só passa para a segunda instrução if se a primeira retornar um valor falso.
Function ObterDesconto(dblPrice As Double) As Double
'usar else if para reduzir o código escrito
If dblPrice >= 2000 Then
ObterDesconto = dblPrice * 0.1
ElseIf dblPrice >= 1000 Then
ObterDesconto = dblPrice * 0.075
ElseIf dblPrice >= 500 Then
ObterDesconto = dblPrice * 0.05
ElseIf dblPrice >= 200 Then
ObterDesconto = dblPrice * 0.025
ElseIf dblPrice >= 100 Then
ObterDesconto = dblPrice * 0.01
Else
ObterDesconto = 0
End If
End Function
Uso de uma Instrução Case
Também podemos usar uma instrução Case para obter o mesmo efeito.
Function ObterDesconto(dblPrice As Double) As Double
Select Case dblPrice
'Essa instrução Case tem 6 níveis de desconto diferentes
Case Is >= 2000
ObterDesconto = dblPrice * 0.1
Case Is >= 1000
ObterDesconto = dblPrice * 0.075
Case Is >= 500
ObterDesconto = dblPrice * 0.05
Case Is >= 200
ObterDesconto = dblPrice * 0.025
Case Is >= 100
ObterDesconto = dblPrice * 0.01
Case Else
ObterDesconto = 0
End Select
End Function