VBA If, ElseIf, Else (Guía definitiva para declaraciones If)

Declaración If de VBA

Si entonces

Las declaraciones If de VBA le permiten probar si las expresiones son VERDADERAS o FALSAS, ejecutando un código diferente según los resultados.Veamos un ejemplo sencillo:
1 Si Rango ("a2"). Valor> 0 Entonces Rango ("b2"). Valor = "Positivo"
Esto prueba si el valor en el rango A2 es mayor que 0. Si es así, establezca el rango B2 en "Positivo"Nota: Al probar las condiciones, usaremos los operadores de comparación =,>, <,, =. Los discutiremos con más detalle más adelante en el artículo.Aquí está la sintaxis para una declaración If simple de una línea:
1 Si [test_expression] entonces [action]
Para que sea más fácil de leer, puede usar un carácter de continuación de línea (guión bajo) para expandir las declaraciones If a dos líneas (como hicimos en la imagen de arriba):
12 Si [test_expression] entonces _[acción]
12 Si Rango ("a2"). Valor> 0 Entonces _Rango ("b2"). Valor = "Positivo"

Terminara si

La declaración if de "línea única" anterior funciona bien cuando está probando una condición. Pero a medida que sus declaraciones IF se vuelven más complicadas con múltiples condiciones, deberá agregar un "End If" al final de la declaración if:
123 Si Rango ("a2"). Valor> 0 EntoncesRango ("b2"). Valor = "Positivo"Terminara si

Aquí la sintaxis es:

123 Si [test_expression] entonces[acción]Terminara si

End If significa el final de la declaración if.

Ahora agreguemos un ElseIF:

ElseIF - Condiciones múltiples

El ElseIf se agrega a una instrucción If existente. ElseIf comprueba si se cumple una condición SOLO si no se han cumplido las condiciones anteriores.En el ejemplo anterior probamos si un valor de celda es positivo. Ahora también probaremos si el valor de la celda es negativo con un ElseIf:
12345 Si Rango ("a2"). Valor> 0 EntoncesRango ("b2"). Valor = "Positivo"ElseIf Range ("a2"). Valor <0 EntoncesRango ("b2"). Valor = "Negativo"Terminara si

Puede usar múltiples ElseIfs para probar múltiples condiciones:

1234567891011 Sub If_Multiple_Conditions ()Si Rango ("a2"). Valor = "Cat" EntoncesRango ("b2"). Valor = "Miau"ElseIf Range ("a2"). Valor = "Perro" EntoncesRango ("b2"). Valor = "Guau"ElseIf Range ("a2"). Value = "Duck" EntoncesRango ("b2"). Valor = "Quack"Terminara siEnd Sub

Ahora agregaremos un Demás:

Demás

los Demás correrá si no se han cumplido otras condiciones previas.

Terminaremos nuestro ejemplo usando un Else para indicar que si el valor de la celda no es positivo o negativo, entonces debe ser cero:

1234567 Si Rango ("a2"). Valor> 0 EntoncesRango ("b2"). Valor = "Positivo"ElseIf Range ("a2"). Valor <0 EntoncesRango ("b2"). Valor = "Negativo"DemásRango ("b2"). Valor = "Cero"Terminara si

If-Else

El tipo más común de declaración If es un simple If-Else:

1234567 Sub If_Else ()Si Rango ("a2"). Valor> 0 EntoncesRango ("b2"). Valor = "Positivo"DemásRango ("b2"). Valor = "No positivo"Terminara siEnd Sub

IF anidados

También puede "anidar" las declaraciones if una dentro de la otra.

1234567891011 Sub Nested_Ifs ()Si Rango ("a2"). Valor> 0 EntoncesRango ("b2"). Valor = "Positivo"DemásSi Rango ("a2"). Valor <0 EntoncesRango ("b2"). Valor = "Negativo"DemásRango ("b2"). Valor = "Cero"Terminara siTerminara siEnd Sub

SI - O, Y, Xor, No

A continuación, discutiremos los operadores lógicos: Or, And, Xor, Not.

Yo para

los O el operador prueba si se cumple al menos una condición.

El siguiente código probará si el valor en el rango A2 es menor que 5,000 o mayor que 10,000:

123 Si Rango ("a2"). Valor 10000 EntoncesRango ("b2"). Valor = "Fuera de rango"Terminara si

Puede incluir varios Ors en una línea:

123 Si Rango ("a2"). Valor 10000 O Rango ("a2"). Valor = 9999 EntoncesRango ("b2"). Valor = "Fuera de rango"Terminara si

Si va a utilizar varios Ors, se recomienda utilizar un carácter de continuación de línea para que su código sea más fácil de leer:

123456 Si Rango ("a2"). Valor <5000 O _Rango ("a2"). Valor> 10000 O _Rango ("a2"). Valor = 9999 EntoncesRango ("b2"). Valor = "Fuera de rango"Terminara si

Si y

El operador Y le permite probar si TODAS las condiciones se cumplen.

123 Si Rango ("a2"). Valor> = 5000 Y Rango ("a2"). Valor <= 10000 EntoncesRango ("b2"). Valor = "Dentro del rango"Terminara si

Si Xor

El operador Xor le permite probar si se cumple exactamente una condición. Si se cumplen las condiciones cero, Xor devolverá FALSE. Si se cumplen dos o más condiciones, Xor también devolverá falso.

Rara vez he visto que Xor se use en la programación de VBA.

Que no

El operador Not se utiliza para convertir FALSE en VERDADERO o VERDADERO en FALSO:

123 Sub IF_Not ()MsgBox no (verdadero)End Sub

Observe que el operador Not requiere paréntesis que rodee la expresión para cambiar.

El operador Not también se puede aplicar a declaraciones If:

123 Si no (Rango ("a2"). Valor> = 5000 Y Rango ("a2"). Valor <= 10000) EntoncesRango ("b2"). Valor = "Fuera de rango"Terminara si

Si comparaciones

Al hacer comparaciones, normalmente utilizará uno de los operadores de comparación:

Operador de comparación Explicación
= Igual a
No igual a
> Mas grande que
>= Mayor qué o igual a
< Menos que
<= Menos que o igual a

Sin embargo, también puede usar cualquier expresión o función que resulta en VERDADERO o FALSO

If - Función booleana

Cuando cree expresiones para declaraciones If, también puede usar cualquier función que genere VERDADERO o Falso. VBA tiene algunas de estas funciones:

Función Descripción
IsDate Devuelve VERDADERO si la expresión es una fecha válida
Esta vacio Compruebe si hay celdas en blanco o variables indefinidas
IsError Verificar valores de error
Es nulo Compruebe el valor NULO
IsNumeric Compruebe el valor numérico

Pueden llamarse así:

1 If IsEmpty (Range ("A1"). Value) Entonces MsgBox "Cell Empty"

Excel también tiene muchas funciones adicionales que se pueden llamar usando WorksheetFunction. A continuación, se muestra un ejemplo de la función IsText de Excel:

12 Si Application.WorksheetFunction.IsText (Range ("a2"). Value) Entonces _MsgBox "La celda es texto"

También puede crear sus propias funciones definidas por el usuario (UDF). A continuación, crearemos una función booleana simple que devuelve VERDADERO. Entonces llamaremos a esa función en nuestra declaración If:

1234567891011 Sub If_Function ()Si TrueFunction entoncesMsgBox "Verdadero"Terminara siEnd SubFunción TrueFunction () como booleanoTrueFunction = VerdaderoFunción final

Comparación de texto

También puede comparar texto similar a comparar números:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Al comparar texto, debe tener en cuenta el "caso" (superior o inferior). De forma predeterminada, VBA considera que las letras con diferentes casos no coinciden. En otras palabras, "A" "a".Si desea que VBA ignore las mayúsculas y minúsculas, debe agregar la declaración Option Compare Text en la parte superior de su módulo:
1 Opción Comparar texto

Después de hacer esa declaración "A" = "a":
12345 Opción Comparar textoSub If_Text ()MsgBox "a" = "A"End Sub

VBA si me gusta

El operador VBA Like le permite realizar comparaciones inexactas de texto. Haga clic en el enlace "Me gusta operador" para obtener más información, pero mostraremos un ejemplo básico a continuación:

12345678 Dim strName como cadenastrName = "Sr. Charles"Si strName como "Mr *", entoncesMsgBox "Verdadero"DemásMsgBox "Falso"Terminara si

Aquí estamos usando un comodín de asterisco "*". El * representa cualquier número de caracteres. Entonces, la declaración If anterior devolverá VERDADERO. El operador Me gusta es una herramienta extremadamente poderosa, pero a menudo infrautilizada para tratar con texto.

Si bucles

Los bucles de VBA le permiten repetir acciones. Combinar IF-ELSE con Loops es una excelente manera de procesar rápidamente muchos cálculos.

Continuando con nuestro ejemplo Positivo / Negativo, agregaremos un For Each Loop para recorrer un rango de celdas:

1234567891011121314 Sub If_Loop ()Atenuar celda como rangoPara cada celda del rango ("A2: A6")Si Cell.Value> 0 entoncesCell.Offset (0, 1) .Value = "Positivo"Else Si Cell.Value <0 EntoncesCell.Offset (0, 1) .Value = "Negative"DemásCell.Offset (0, 1) .Value = "Cero"Terminara siSiguiente celdaEnd Sub

Si hay otros ejemplos

Ahora repasaremos algunos ejemplos más específicos.

Compruebe si la celda está vacía

Este código verificará si una celda está vacía. Si está vacío, ignorará la celda. Si no está vacío, generará el valor de la celda en la celda de la derecha:
1234567 Sub If_Cell_Empty ()Si Rango ("a2"). Valor "" EntoncesRango ("b2"). Valor = Rango ("a2"). ValorTerminara siEnd Sub

Compruebe si la celda contiene texto específico

La función Instr prueba si se encuentra una cadena de texto en otra cadena. Úselo con una instrucción If para verificar si una celda contiene texto específico:
123 Si Instr (Rango ("A2"). Valor, "texto")> 0 EntoncesMsgbox "Texto encontrado"Terminara si

Compruebe si la celda contiene texto

Este código probará si una celda es texto:
1234567 Sub If_Cell_Is_Text ()Si Application.WorksheetFunction.IsText (Range ("a2"). Value) EntoncesMsgBox "La celda es texto"Terminara siEnd Sub

Si Goto

Puede utilizar el resultado de una instrucción If para "Ir a" otra sección de código.
12345678910 Sub IfGoTo ()Si IsError (Cell.value) EntoncesIr a SaltarTerminara si'Algún códigoSaltar:End Sub

Eliminar fila si la celda está en blanco

Con Ifs y bucles, puede probar si una celda está en blanco y, de ser así, eliminar toda la fila.
123456789 Sub DeleteRowIfCellBlank ()Atenuar celda como rangoPara cada celda del rango ("A2: A10")Si Cell.Value = "" Entonces Cell.EntireRow.DeleteSiguiente celdaEnd Sub

Si MessageBox Sí / No

Con los cuadros de mensaje de VBA, puede pedirle al usuario que seleccione entre varias opciones. El cuadro de mensaje Sí / No le pide al usuario que seleccione Sí o No. Puede agregar un cuadro de mensaje Sí / No a un procedimiento para preguntarle al usuario si desea continuar ejecutando el procedimiento o no. Maneja la entrada del usuario usando una declaración If.Aquí está el cuadro de mensaje Sí / No en la práctica:
123456789101112 Sub MsgBoxVariable ()Respuesta tenue como enteroanswer = MsgBox ("¿Desea continuar?", vbQuestion + vbYesNo)Si answer = vbYes EntoncesMsgBox "Sí"DemásMsgBox "No"Terminara siEnd Sub

VBA If, ElseIf, Else en Access VBA

Las funciones If, ElseIf y Else funcionan exactamente igual en Access VBA que en Excel VBA.

Puede utilizar una instrucción If para comprobar si hay registros en un conjunto de registros.

wave wave wave wave wave