VBA Lógico Operators: Y, O, NO, SI NO en Excel VBA
⚡ Resumen inteligente
VBA Lógico OperaLos operadores AND, OR y NOT combinan varias condiciones para obtener un único resultado verdadero o falso. Esta página explica los operadores AND, OR y NOT con ejemplos prácticos de botones de comando, una tabla de verdad completa y los operadores menos conocidos XOR, EQV e IM.

Excel VBA Lógico Operatoros
Supongamos que desea procesar el pedido de un cliente. Para ello, primero debe comprobar si el producto solicitado existe o no. Si es así, también debe comprobar si la cantidad disponible es suficiente. Los operadores lógicos resultan útiles en estos casos. Los operadores lógicos se utilizan para evaluar más de una condición.
Cada condición por sí sola se construye a partir de operadores de comparación y devuelve Verdadero o Falso. Un operador lógico combina esos resultados para obtener una respuesta final.
Los principales operadores lógicos de Excel VBA AND, OR, NOT se enumeran en la siguiente tabla:
| S / N | Operator | Mareas Ideales para Lecciones | Ejemplo | Resultado |
|---|---|---|---|---|
| 1 | Y | AND: Se utiliza para combinar más de una condición. Si todas las condiciones son verdaderas, Y se evalúa como verdadera. Si alguna de las condiciones es falsa Y se evalúa como falsa | Si (1 = 1) Y (0 = 1) Entonces | false |
| 2 | OR | O: Se utiliza para combinar más de una condición. Si alguna de las condiciones se evalúa como verdadera, O devuelve verdadero. Si todos son falsos, O devuelve falso | Si (1 = 1) o (5 = 0) entonces | su verdadero |
| 3 | NO: Esta funciona como una función inversa. Si la condición es verdadera, devuelve falso, y si una condición es falsa, devuelve verdadero. | Si no (0 = 0) Entonces | false |
Las tres descripciones anteriores son más fáciles de recordar como una única cuadrícula de entradas y resultados.
Tabla de verdad para lógica VBA Operatoros
Una tabla de verdad enumera todas las combinaciones posibles de entradas y el resultado que devuelve cada operador. Con solo leerla una vez, se eliminan las conjeturas al escribir cualquier condición posteriormente.
| Condición A | Condición B | A y B | A o B | No un |
|---|---|---|---|---|
| Cierto | Cierto | Cierto | Cierto | Falso |
| Cierto | Falso | Falso | Cierto | Falso |
| Falso | Cierto | Falso | Cierto | Cierto |
| Falso | Falso | Falso | Falso | Cierto |
Hay dos patrones que vale la pena memorizar. Y Produce True en solo una fila de cuatro, por lo que reduce la selección. OR produce Falso en una sola fila, por lo que amplía una. Toma una sola condición en lugar de dos, por eso tiene una columna propia.
VBA Lógico OperaFuente de ejemplo de tors Code
Para simplificar, compararemos números codificados.
Agregue botones ActiveX a la hoja desde la "opción Insertar".
Establezca las propiedades como se muestra en la imagen a continuación.

La siguiente tabla muestra las propiedades que debe cambiar y los valores que también debe actualizar.
| S / N | Control | Propiedad | Valor |
|---|---|---|---|
| 1 | Botón de comando1 | Nombre | btnAND |
| Leyenda | Y Operator (1 = 1) Y (0 = 0) | ||
| 2 | Botón de comando2 | Nombre | btnor |
| Leyenda | OR Operator (1 = 1) O (5 = 0) | ||
| 3 | Botón de comando3 | Nombre | btnNO |
| Leyenda | Operapara No (0 = 0) |
Agregue el siguiente código a btnAND_Click
Private Sub btnAND_Click() If (1 = 1) And (0 = 0) Then MsgBox "AND evaluated to TRUE", vbOKOnly, "AND operator" Else MsgBox "AND evaluated to FALSE", vbOKOnly, "AND operator" End If End Sub
VBA si Y Operator
- “Si (1 = 1) y (0 = 0) entonces” La sentencia if utiliza el operador lógico AND para combinar dos condiciones (1 = 1) y (0 = 0). Si ambas condiciones son verdaderas, se ejecuta el código que se encuentra por encima de la palabra clave 'Else'. Si ambas condiciones no son verdaderas, se ejecuta el código que se encuentra por debajo de la palabra clave 'Else'.
Ambas condiciones se cumplen aquí, por lo que al hacer clic en el botón se muestra "Y evaluado como VERDADERO".
Agregue el siguiente código a btnOR_Click
Private Sub btnOR_Click() If (1 = 1) Or (5 = 0) Then MsgBox "OR evaluated to TRUE", vbOKOnly, "OR operator" Else MsgBox "OR evaluated to FALSE", vbOKOnly, "OR operator" End If End Sub
VBA si O Operator
- “Si (1 = 1) o (5 = 0) entonces” La instrucción if utiliza el operador lógico OR para combinar dos condiciones: (1 = 1) o (5 = 0). Si alguna de las condiciones es verdadera, se ejecuta el código que aparece encima de la palabra clave Else. Si ambas condiciones son falsas, se ejecuta el código que aparece debajo de la palabra clave Else.
La primera condición es verdadera y la segunda es falsa, por lo que OR sigue devolviendo verdadero y el mensaje dice "OR evaluado como VERDADERO".
Agregue el siguiente código a btnNOT_Click
Private Sub btnNOT_Click() If Not (0 = 0) Then MsgBox "NOT evaluated to TRUE", vbOKOnly, "NOT operator" Else MsgBox "NOT evaluated to FALSE", vbOKOnly, "NOT operator" End If End Sub
VBA si no Operator
- “Si no (0 = 0) entonces” La función VBA If Not utiliza el operador lógico NOT para negar el resultado de la condición de la instrucción if. La condición interna (0 = 0) es verdadera, por lo que Not la convierte en falsa y se ejecuta el código que se encuentra debajo de la palabra clave 'Else'. Si la condición interna hubiera sido falsa, Not la habría convertido en verdadera y se habría ejecutado el código que se encuentra encima de 'Else'.
Estos tres botones prueban cada uno un valor fijo. Las condiciones reales se leen de la hoja de cálculo y combinan ambas familias de operadores.
Cómo combinar la lógica y la comparación Operatoros
Una macro de producción rara vez prueba un número fijo. Lee un valor, lo compara y combina varias de esas comparaciones para tomar una decisión. La macro que se muestra a continuación aprueba un pedido solo cuando el producto existe, la cantidad es suficiente y la cuenta del cliente no está bloqueada.
Sub ApproveOrder() Dim QtyOnHand As Long Dim QtyOrdered As Long Dim OnHold As Boolean QtyOnHand = Sheet1.Range("B2").Value QtyOrdered = Sheet1.Range("B3").Value OnHold = Sheet1.Range("B4").Value ' All three parts must hold for the order to pass If (QtyOrdered > 0) And (QtyOnHand >= QtyOrdered) And Not OnHold Then Sheet1.Range("B5").Value = "Approved" Else Sheet1.Range("B5").Value = "On hold" End If End Sub
Tres reglas permiten que una condición combinada sea legible y correcta.
- Entre paréntesis todas las comparaciones: VBA evalúa los operadores de comparación antes que los lógicos, pero los corchetes hacen que el grupoping obvio y evitar un error cuando la condición empeore posteriormente.
- Tenga en cuenta la precedencia de "Y" sobre "O": A o B y C se lee como A o (B y C). Si te referías a (A o B) y CLos paréntesis son obligatorios.
- No se aplica a un valor booleano, no a un número: No está en espera Se lee de forma natural. Evitar No 5, porque Not realiza una operación bit a bit en los números y devuelve -6 en lugar de False.
⚠️ Advertencia: VBA no provoca un cortocircuito. Si (ws es Nothing) o (ws.Name = “Data”) entonces, la segunda parte sigue ejecutándose incluso cuando la primera es verdadera, lo que genera el error de tiempo de ejecución 91. Divida dichas condiciones en sentencias If anidadas.
Xor, Eqv e Imp Operators en VBA
Los operadores AND, OR y NOT cubren casi todas las situaciones cotidianas, pero VBA proporciona tres operadores lógicos adicionales que, en ocasiones, expresan una regla con mucha más claridad que una serie de sentencias If.
| Operator | Devuelve verdadero cuando | Ejemplo | Resultado |
|---|---|---|---|
| Xor | Exactamente una de las dos condiciones es verdadera, nunca ambas. | (1 = 1) Xor (5 = 0) | Cierto |
| Equivalente | Ambas condiciones tienen el mismo valor, ambas verdaderas o ambas falsas. | (1 = 1) Eqv (2 = 2) | Cierto |
| Diablillo | La primera condición implica la segunda; solo True Imp False es falso. | (1 = 1) Imp (5 = 0) | Falso |
XOR es la más práctica de las tres. Se adapta a reglas como «un descuento se aplica a un empleado o a un miembro del programa de fidelización, pero no a alguien que sea ambas cosas». Eqv e Imp aparecen principalmente en código antiguo y en ejercicios de lógica, por lo que reconocerlas es más importante que escribirlas.
Descargue Excel que contiene el código anterior
