VBA Múltiples (Anidadas) Sentencias If
In this Article
Este tutorial le mostrará cómo utilizar Sentencias If anidadas en VBA.
Las Sentencias If le permiten probar una sola condición en VBA para ver si la condición es Verdadera o Falsa, y dependiendo de la respuesta, el código se moverá en la dirección de la sentencia verdadera o la falsa.
Una Sola Sentencia IF
Sub PruebaIf()
Dim x As Integer
x = 10
If x = 10 Then
'si x es 10, la condición es verdadera
MsgBox "x es 10"
Else
'si x no es 10, la condición es falsa
MsgBox "x No es 10"
End If
End Sub
Explicación de los IFs anidados
Un If anidado le permite poner múltiples condiciones dentro de cada una de las sentencias Verdadero y/o Falso del If original.
Sub PruebaIfAnidado()
Dim x As Integer
Dim y As Integer
Dim z As Integer
x = 10
y = 9
z = 8
If x = 10 Then
'si x es 10, la condición es verdadera así que prueba para y
If y = 9 Then
MsgBox "y es 9"
Else
'si y no es 9, la condición es falsa
MsgBox "y no es 9"
End If
Else
'si x no es 10 entonces la condición es falsa, entonces probemos z
If z = 8 Then
MsgBox "z es 8"
Else
'si z no es 8, la condición es falsa
MsgBox "z no es 8"
End If
'se necesita otro End If para cerrar el original si
End If
End Sub
Indentar su código cuando lo escribe siempre es una buena práctica, ya que hace que el código sea fácil de leer y seguir cuando tenga que volver a él en algún momento, o cuando otro programador tenga que leerlo.
También podemos crear una función diseñada por el usuario (UDF) y llamar los valores de algunas celdas de Excel a la función utilizando parámetros.
Function GetIf(x As Integer, y As Integer, z As Integer) As String
If x = 10 Then
'si x es 10, la condición es verdadera así que prueba para y
If y = 9 Then
GetIf = "y es 9"
Else
'si y no es 9, la condición es falsa
GetIf = "y no es 9"
End If
Else
'si x no es 10 entonces la condición es falsa, entonces probemos z
If z = 8 Then
GetIf = "z es 8"
Else
'si z no es 8, la condición es falsa
GetIf = "z no es 8"
End If
'se necesita otro End If para cerrar el If Original
End If
End Function
Ejemplo Práctico de IF anidado
Considere la siguiente función:
Function GetDiscount(dblPrice As Double) As Double
If dblPrice >= 1000 Then
'si el precio es superior a 1000, asignar un descuento
If dblPrice >= 2000 Then
'si es superior a 2000, dar un 10% de descuento
GetDiscount = dblPrice * 0.1
Else
'si no, dar un 5% de descuento
GetDiscount = dblPrice * 0.05
End If
'si el precio no es superior a 1000
Else
'si es superior a 500, se aplica un descuento del 2,5%.
If dblPrice >= 500 Then
GetDiscount = dblPrice * 0.025
Else
'si no, no hay descuento
GetDiscount = 0
End If
'se necesita otro End If para cerrar el If original
End If
End Function
Usando esta función en una hoja de Excel, podemos probar para ver el precio total de un pedido, y aplicar diferentes descuentos dependiendo de ese total.
Utilizando ElseIf
ElseIf nos permite simplificar su código, ya que sólo pasa a la segunda sentencia if si la primera devuelve un false.
Function GetDiscount(dblPrice As Double) As Double
'utilizar else if para reducir la escritura de código
If dblPrice >= 2000 Then
GetDiscount = dblPrice * 0.1
ElseIf dblPrice >= 1000 Then
GetDiscount = dblPrice * 0.075
ElseIf dblPrice >= 500 Then
GetDiscount = dblPrice * 0.05
ElseIf dblPrice >= 200 Then
GetDiscount = dblPrice * 0.025
ElseIf dblPrice >= 100 Then
GetDiscount = dblPrice * 0.01
Else
GetDiscount = 0
End If
End Function
Utilizando una Sentencia Case
También podemos utilizar una sentencia Case para conseguir el mismo efecto.
Function GetDiscount(dblPrice As Double) As Double
Select Case dblPrice
'Esta Sentencia Case tiene 6 niveles de descuento diferentes
Case Is >= 2000
GetDiscount = dblPrice * 0.1
Case Is >= 1000
GetDiscount = dblPrice * 0.075
Case Is >= 500
GetDiscount = dblPrice * 0.05
Case Is >= 200
GetDiscount = dblPrice * 0.025
Case Is >= 100
GetDiscount = dblPrice * 0.01
Case Else
GetDiscount = 0
End Select
End Function