Cómo usar If-Then en Excel 2016 VBA

  1. Software
  2. Oficina de Microsoft
  3. Excel
  4. Cómo usar If-Then en Excel 2016 VBA

Libro Relacionado

Programación de Excel VBA para Dummies, 4ª Edición

Por John Walkenbach

If-Then es la estructura de control más importante de VBA. Es probable que utilice este comando a diario. Utilice la estructura If-Then cuando desee ejecutar una o más expresiones condicionalmente. La cláusula opcional Else, si se incluye, le permite ejecutar una o más sentencias si la condición que está probando no es verdadera. He aquí un sencillo procedimiento de CheckUser, recodificado para usar la estructura If-Then-Else:

Sub CheckUser2() UserName = InputBox("Ingrese su nombre: ") Si UserName = "Satya Nadella" Entonces MsgBox ("Welcome Satya....")'...[Más código aquí] ... Else MsgBox "Sorry. Sólo Satya Nadella puede dirigir esto." Finalizar IfEnd Sub

Ejemplos de If-Then

La siguiente rutina muestra la estructura If-Then sin la cláusula opcional Else:

Sub GreetMe() If Time < 0.5 Then MsgBox "Good Morning"End Sub

El procedimiento GreetMe utiliza la función Time de VBA para obtener la hora del sistema. Si la hora actual es inferior a .5, la rutina muestra un saludo amistoso. Si el Tiempo es mayor o igual a .5, la rutina termina y no pasa nada.

Para mostrar un saludo diferente si el Tiempo es mayor o igual a .5, puede agregar otra declaración If-Then después de la primera:

Sub GreetMe2() If Time < 0.5 Then MsgBox "Good Morning" If Time >= 0.5 Then MsgBox "Good Afternoon"End Sub

Note que >= (mayor que o igual a) se usa para la segunda declaración If-Then. Esto asegura que se cubra todo el día. Si se hubiera utilizado > (mayor que), no aparecería ningún mensaje si este procedimiento se ejecutara exactamente a las 12:00 del mediodía. Eso es bastante improbable, pero con un programa tan importante como éste, no hay que arriesgarse.

Un ejemplo de If-Then-Else

Otro enfoque del problema anterior utiliza la cláusula Else. Aquí está la misma rutina recodificada para usar la estructura If-Then-Else:

Sub GreetMe3() If Time < 0.5 Then MsgBox "Good Morning" Else _ MsgBox "Good Afternoon"End Sub

Observe que el carácter de continuación de línea (subrayado) se utiliza en el ejemplo anterior. La sentencia If-Then-Else es en realidad una única sentencia. VBA proporciona una forma ligeramente diferente de codificar construcciones If-Then-Else que utilizan una sentencia End If. Por lo tanto, el procedimiento GreetMe puede reescribirse de la siguiente manera

Sub GreetMe4() If Time < 0.5 Then MsgBox "Good Morning" Else MsgBox "Good Afternoon" End IfEnd Sub

De hecho, puede insertar cualquier número de frases en la parte If y cualquier número de frases en la parte Else. Esta sintaxis es más fácil de leer y hace que las frases sean más cortas.

¿Qué pasa si necesitas expandir la rutina de GreetMe para manejar tres condiciones: mañana, tarde y noche? Tienes dos opciones: Utilice tres sentencias If-Then o utilice una estructura If-Then-Else anidada. Anidar significa colocar una estructura If-Then-Else dentro de otra estructura If-Then-Else. El primer enfoque, que utiliza tres sentencias If-Then, es más sencillo:

Sub GreetMe5() Dim Msg As String If Time < 0.5 Then Msg = "Morning" If Time >= 0.5 And Time < 0.75 Then Msg = "Afternoon" If Time >= 0.75 Then Msg = "Evening" MsgBox "Good " & MsgEnd Sub

Se añadió un nuevo giro con el uso de una variable. La variable Msg obtiene un valor de texto diferente, dependiendo de la hora del día. La sentencia MsgBox muestra el saludo: Buenos días, buenas tardes o buenas noches.

La siguiente rutina realiza la misma acción pero utiliza una estructura If-Then-End If:

Sub GreetMe6() Dim Msg As String If Time < 0.5 Then Msg = "Morning" End If Time >= 0.5 And Time < 0.75 Then Msg = "Afternoon" End If Time >= 0.75 Then Msg = "Evening" End If MsgBox "Good " & MsgEnd Sub

Uso de ElseIf

En los ejemplos anteriores, se ejecutan todas las expresiones de la rutina. Una estructura ligeramente más eficiente saldría de la rutina tan pronto como se descubra que una condición es verdadera. Por la mañana, por ejemplo, el procedimiento debe mostrar el mensaje de Buenos Días y luego salir, sin evaluar las otras condiciones superfluas.

Con una rutina tan pequeña como esta, no tiene que preocuparse por la velocidad de ejecución. Pero para aplicaciones más grandes en las que la velocidad es crítica, debería conocer otra sintaxis para la estructura If-Then.

He aquí cómo puede reescribir la rutina GreetMe utilizando esta sintaxis:

Sub GreetMe7() Dim Msg As String If Time < 0.5 Then Msg = "Morning" ElseIf Time >= 0.5 And Time < 0.75 Then Msg = "Afternoon" Else Msg = "Evening" End If MsgBox "Good" & MsgEnd Sub

Cuando una condición es verdadera, VBA ejecuta las sentencias condicionales y la estructura If termina. En otras palabras, este procedimiento es un poco más eficiente que los ejemplos anteriores. La desventaja es que el código es más difícil de entender.

Otro ejemplo de If-Then

He aquí otro ejemplo que utiliza la forma simple de la estructura If-Then. Este procedimiento solicita al usuario una cantidad y, a continuación, muestra el descuento apropiado, en función de la cantidad introducida por el usuario:

Sub ShowDiscount() Dim Quantity As Long Dim Discount As Double Quantity = InputBox("Enter Quantity:") If Quantity > 0 Then Discount = 0.1 If Quantity >= 25 Then Discount = 0.15 If Quantity >= 50 Then Discount = 0.2 If Quantity >= 75 Then Discount = 0.25 MsgBox "Discount: "& DiscountEnd Sub

Observe que cada instrucción If-Then de esta rutina se ejecuta, y el valor de Descuento puede cambiar a medida que se ejecutan las instrucciones. Sin embargo, la rutina muestra finalmente el valor correcto para Descuento porque las sentencias If-Then están en orden de valores de Descuento ascendentes.

El siguiente procedimiento realiza las mismas tareas utilizando la sintaxis alternativa ElseIf. En este caso, la rutina termina inmediatamente después de ejecutar las sentencias para una condición verdadera:

Sub ShowDiscount2() Dim Quantity As Long Dim Discount As Double Quantity = InputBox("Enter Quantity: ") If Quantity &gt; 0 And Quantity &lt; 25 Then Discount = 0.1 ElseIf Cantidad &gt;= 25 Y Cantidad &lt; 50 Entonces Descuento = 0.15 ElseIf Cantidad &gt;= 50 Y Cantidad &lt; 75 Entonces Descuento = 0.2 ElseIf Cantidad &gt;= 75 Entonces Descuento = 0.25 Fin Si MsgBox "Descuento: "& DiscountEnd Sub

Estas múltiples estructuras If-Then son bastante engorrosas. Puede utilizar la estructura If-Then sólo para decisiones binarias simples.

No Responses

Write a response