Tabla de contenido:
Video: Excel VBA IF THEN Statement (with ELSEIF & Looping in cells) 2024
If-Then es la estructura de control más importante de VBA. Probablemente usarás este comando todos los días. Use la estructura If-Then cuando quiera ejecutar una o más declaraciones de forma condicional. La cláusula Else opcional, si está incluida, le permite ejecutar una o más declaraciones si la condición que está probando es no verdadera. Aquí hay un procedimiento simple CheckUser, recodificado para usar la estructura If-Then-Else:
Sub CheckUser2 () UserName = InputBox ("Ingrese su nombre:") If UserName = "Satya Nadella" Then MsgBox ("Bienvenido Satya …") '… [Más código aquí] … Else MsgBox "Lo siento. Solo Satya Nadella puede ejecutar esto. "End If End Sub
Ejemplos If-Then
La siguiente rutina muestra la estructura If-Then sin la cláusula Else opcional:
Sub GreetMe () If Time <0. 5 then MsgBox" Good Morning "End Sub
El procedimiento GreetMe usa la función de tiempo de VBA para obtener la hora del sistema. Si la hora actual es menor que. 5, la rutina muestra un saludo amistoso. Si Time es mayor o igual que. 5, la rutina termina, y no pasa nada.
Para mostrar un saludo diferente si Time 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 Afternoon" End Sub
Observe que> = (mayor o igual que) se usa para la segunda declaración If-Then. Esto asegura que todo el día esté cubierto. Si se ha utilizado> (mayor que), no aparecerá ningún mensaje si este procedimiento se ejecutó precisamente a las 12:00 del mediodía. Eso es bastante improbable, pero con un programa importante como este, no querrás arriesgarte.
Un ejemplo If-Then-Else
Otro enfoque del problema anterior usa la cláusula Else. Aquí está la misma rutina grabada para usar la estructura If-Then-Else:
Sub GreetMe3 () Si Tiempo <0. 5 entonces MsgBox "Buenos días" Else _ MsgBox "Buenas tardes" End Sub
Observe que la línea el carácter de continuación (guión bajo) se usa en el ejemplo anterior. La instrucción If-Then-Else es en realidad una sola declaración. VBA proporciona una forma ligeramente diferente de codificación de construcciones If-Then-Else que utilizan una instrucción End If. Por lo tanto, el procedimiento GreetMe puede reescribirse como
Sub GreetMe4 () Si Tiempo <0. 5 entonces MsgBox "Buenos días" Else MsgBox "Buenas tardes" Fin Si Fin Sub
De hecho, puede insertar cualquier cantidad de declaraciones debajo del Si parte y cualquier cantidad de declaraciones en la parte Else. Esta sintaxis es más fácil de leer y hace que las declaraciones sean más cortas.
¿Qué sucede si necesita expandir la rutina GreetMe para manejar tres condiciones: mañana, tarde y noche? Tiene dos opciones: usar tres instrucciones If-Then o usar una estructura anidada If-Then-Else. Anidar significa colocar una estructura If-Then-Else dentro de otra estructura If-Then-Else. El primer enfoque, usando tres declaraciones If-Then, es más simple:
Sub GreetMe5 () Dim Msg As String If Time = 0. 5 Y Time = 0. 75 Then Msg = "Evening" MsgBox "Good" & Msg End Sub
Se agregó un nuevo giro con el uso de una variable. La variable Msg obtiene un valor de texto diferente, según la hora del día. La instrucción MsgBox muestra el saludo: Buenos días, Buenas tardes o Buenas tardes.
La siguiente rutina realiza la misma acción pero usa una estructura If If-Then-End If:
Sub GreetMe6 () Dim Msg As String If Time = 0. 5 Y Time = 0. 75 Then Msg = "Evening" End If MsgBox "Bueno" y Msg End Sub
Usando ElseIf
En los ejemplos anteriores, se ejecuta cada instrucción en la rutina. Una estructura un poco más eficiente saldría de la rutina tan pronto como se encuentre una condición verdadera. Por la mañana, por ejemplo, el procedimiento debe mostrar el mensaje Buenos días y luego salir, sin evaluar las demás condiciones superfluas.
Con una pequeña rutina 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, debe conocer otra sintaxis para la estructura If-Then.
Aquí puede reescribir la rutina GreetMe utilizando esta sintaxis:
Sub GreetMe7 () Dim Msg As String If Time = 0. 5 Y Time <0. 75 then Msg = "Afternoon" Else Msg = "Evening "End If MsgBox" Good "& Msg End Sub
Cuando una condición es verdadera, VBA ejecuta las instrucciones condicionales, y la estructura If finaliza. 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 If-Then
Aquí hay otro ejemplo que usa la forma simple de la estructura If-Then. Este procedimiento solicita al usuario una cantidad y luego muestra el descuento apropiado, basado en la cantidad que ingresa el usuario:
Sub ShowDiscount () Dim Cantidad Tan larga Dim Descuento como Double Quantity = InputBox ("Enter Quantity:") If Quantity > 0 Entonces Descuento = 0. 1 Si Cantidad> = 25 Entonces Descuento = 0. 15 Si Cantidad> = 50 Entonces Descuento = 0. 2 Si Cantidad> = 75 Entonces Descuento = 0. 25 MsgBox "Descuento:" & Descuento End Sub
Observe que se ejecuta cada instrucción If-Then en esta rutina y que 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 declaraciones If-Then están en orden de valores de Descuento ascendentes.
El siguiente procedimiento realiza las mismas tareas utilizando la sintaxis alternativa de ElseIf. En este caso, la rutina finaliza inmediatamente después de ejecutar las declaraciones para una condición verdadera:
Sub ShowDiscount2 () Dim Cantidad como Long Dim Descuento como Double Quantity = InputBox ("Enter Quantity:") If Quantity> 0 And Quantity <25 luego Descuento = 0.1 ElseIf Quantity> = 25 And Quantity <50 then Discount = 0. 15 ElseIf Quantity> = 50 And Quantity <75 then Discount = 0. 2 ElseIf Quantity> = 75 Then Discount = 0. 25 End If MsgBox "Discount:" & Descuento End Sub
Estas estructuras If-Then múltiples son bastante engorrosas. Es posible que desee utilizar la estructura If-Then solo para decisiones binarias simples.