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:
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:
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.
