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.

  • 🔗 Propósito: Los operadores lógicos evalúan más de una condición dentro de una sola instrucción If.
  • ✅ Y Operacolina: Devuelve verdadero solo cuando todas las condiciones a las que se une son verdaderas.
  • ➕ OR Operacolina: Devuelve verdadero cuando al menos una de las condiciones es verdadera.
  • 🔄 Operacolina: Invierte un resultado, convirtiendo Verdadero en Falso y Falso en Verdadero.
  • 📊 Mesa de la verdad: Una única cuadrícula de referencia muestra el resultado de cada operador para cada combinación de entrada.
  • 🧮 Extra Operatores: Las funciones Xor, Eqv e Imp manejan condiciones exclusivas, equivalentes e implícitas.
  • ⚠️ Sin cortocircuito: VBA evalúa cada parte de una condición, por lo que una prueba de guarda debe estar dentro de una estructura If anidada.

VBA Lógico Operaoperadores: AND, OR, NOT en Excel VBA

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.

VBA Lógico Operatoros
VBA Lógico Operatoros

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

Preguntas Frecuentes

No existe un límite práctico, pero la legibilidad disminuye rápidamente a partir de tres o cuatro. Traslade una condición larga a una variable booleana con un nombre descriptivo y, en su lugar, pruebe esa variable en la instrucción If.

Aplicado a un número, el operador Not realiza una inversión bit a bit en lugar de una inversión lógica. Aplíquelo únicamente a una comparación o a una variable booleana, como Not (Cantidad > 0), de modo que el resultado sea verdadero o falso.

La lógica coincide, pero la sintaxis difiere. Una fórmula de hoja de cálculo las llama funciones, AND(A1>0, B1>0). VBA las coloca entre las condiciones, como en If A1 > 0 And B1 > 0 Then.

Sí. Pega la condición y un asistente de IA la reescribe con paréntesis más claros o la divide en variables booleanas con nombre. Verifica la reescritura con una tabla de verdad, ya que una simplificación incorrecta altera el comportamiento silenciosamente.

Sí. Basta con introducir la expresión y un asistente de IA enumera todas las combinaciones de entrada con su resultado, lo que permite detectar rápidamente una bifurcación a la que nunca se puede llegar o un paréntesis colocado en la posición incorrecta.

Resumir este post con: