VBA Logical Operaтори: І, АБО, НІ, ЯКЩО НІ в Excel VBA

⚡ Розумний підсумок

VBA Logical OperaУмови об'єднуються в один результат «Істина» або «Хибність». На цій сторінці пояснюються оператори «І», «АБО» та «НЕ» з прикладами кнопок, що запускаються, повною таблицею істинності та менш відомими операторами Xor, Eqv та Imp.

  • 🔗 Мета: Логічні оператори обчислюють більше однієї умови в одному операторі If.
  • І Operaтор: Повертає значення True лише тоді, коли кожна умова, з якою він з'єднується, є True.
  • OR Operaтор: Повертає значення True, коли хоча б одна з умов є True.
  • 🔄 $NOT Operaтор: Інвертує результат, перетворюючи True на False, а False на True.
  • 📊 Таблиця істинності: Єдина опорна сітка показує результат кожного оператора для кожної комбінації вхідних даних.
  • 🧮 Extra Operaторс: Xor, Eqv та Imp обробляють виключні, еквівалентні та неявні умови.
  • ⚠️ Без короткого замикання: VBA оцінює кожну частину умови, тому захисний тест має розміщуватися у вкладеному If.

VBA Logical Operaоператори: І, АБО, НЕ в Excel VBA

Логічний Excel VBA Operaторс

Припустимо, ви хочете обробити замовлення клієнта. Для цього ви хочете спочатку перевірити, чи існує замовлений продукт чи ні. Якщо так, ви також хочете перевірити, чи достатньо наявної кількості. У таких випадках стають у пригоді логічні оператори. Логічні оператори використовуються для оцінки кількох умов.

Кожна умова сама по собі побудована з оператори порівняння і повертає True або False. Логічний оператор потім об'єднує ці результати в одну остаточну відповідь.

Основні логічні оператори Excel VBA AND, OR, NOT перераховані в таблиці нижче:

S / N Operaтор Опис Приклад Вихід
1 І І: використовується для поєднання кількох умов. Якщо всі умови істинні, AND оцінюється як істинне. Якщо будь-яка умова хибна, AND оцінюється як хибна Якщо (1 = 1) та (0 = 1), тоді false
2 OR АБО: використовується для поєднання кількох умов. Якщо будь-яка з умов має значення true, функція OR повертає значення true. Якщо всі вони false, OR повертає false Якщо (1 = 1) або (5 = 0), тоді правда
3 $NOT НІ: Ця функція працює як зворотна функція. Якщо умова істинна, вона повертає false, а якщо умова хибна, повертає true. Якщо ні (0 = 0), то false

Три наведені вище описи легше запам'ятати як єдину сітку вхідних даних та результатів.

Таблиця істинності для логічних обчислень VBA Operaторс

Таблиця істинності містить усі комбінації вхідних даних та результат, який повертає кожен оператор. Одноразове прочитання цієї таблиці позбавляє необхідності здогадуватися про будь-яку умову, яку ви пишете пізніше.

Умова А Умова Б А та Б А або Б Не А
Правда Правда Правда Правда Помилковий
Правда Помилковий Помилковий Правда Помилковий
Помилковий Правда Помилковий Правда Правда
Помилковий Помилковий Помилковий Помилковий Правда

Варто запам'ятати дві закономірності. І повертає значення True лише для одного рядка з чотирьох, тому вибірка звужується. OR повертає False лише для одного рядка, тому розширює один. $NOT приймає одну умову, а не дві, тому має окремий стовпець.

VBA Logical OperaПриклад джерела Code

Для простоти ми будемо порівнювати жорстко закодовані числа.

Додайте кнопки ActiveX на аркуш із пункту «Вставити».

Встановіть властивості, як показано на зображенні нижче

VBA Logical Operaторс
VBA Logical Operaторс

У наведеній нижче таблиці показано властивості, які потрібно змінити, а також значення, які потрібно оновити.

S / N Контроль властивість значення
1 CommandButton1 ІМ'Я btnAND
Підпис І Operaтор (1 = 1) та (0 = 0)
2 CommandButton2 ІМ'Я btnOR
Підпис OR Operaтор (1 = 1) або (5 = 0)
3 CommandButton3 ІМ'Я btnNOT
Підпис $NOT Operaтор Не (0 = 0)

Додайте наступний код до 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 Якщо І Operaтор

  • «Якщо (1 = 1) і (0 = 0) тоді» оператор if використовує логічний оператор AND для поєднання двох умов (1 = 1) і (0 = 0). Якщо обидві умови виконуються, виконується код над ключовим словом "Else". Якщо обидві умови не виконуються, виконується код під ключовим словом "Else".

Обидві умови тут істинні, тому після натискання кнопки відображається «І оцінюється як ІСТИНА».

Додайте наступний код до 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 Якщо АБО Operaтор

  • «Якщо (1 = 1) Або (5 = 0) Тоді» Оператор if використовує логічний оператор OR для об'єднання двох умов (1 = 1) або (5 = 0). Якщо будь-яка з умов істинна, виконується код, наведений вище за ключовим словом Else. Якщо обидві умови хибні, виконується код, наведений нижче за ключовим словом Else.

Перша умова істинна, а друга — хибна, тому АБО все одно повертає істину, і повідомлення виглядає так: «АБО оцінюється як ІСТИНА».

Додайте наступний код до 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 Якщо НІ Operaтор

  • «Якщо ні (0 = 0), тоді» Функція VBA If Not використовує логічний оператор NOT для заперечення результату умови оператора if. Внутрішня умова (0 = 0) є істинною, тому Not перетворює її на хибну, і виконується код під ключовим словом «Else». Якби внутрішня умова була хибною, Not перетворювала б її на істинну, і замість неї виконався б код над «Else».

Ці три кнопки перевіряють фіксоване значення. Реальні умови зчитуються з робочого аркуша та поєднують обидва сімейства операторів.

Як поєднати логіку та порівняння Operaторс

Виробничий макрос рідко перевіряє жорстко задане число. Він зчитує значення, порівнює його та об'єднує кілька цих порівнянь в одне рішення. Макрос нижче затверджує замовлення лише тоді, коли продукт існує, кількість достатня, а обліковий запис клієнта не заблоковано.

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

Три правила забезпечують читабельність та правильність комбінованої умови.

  • Закріпіть кожне порівняння у дужках: VBA обчислює оператори порівняння перед логічними, але дужки роблять групуping очевидним та запобігти помилці, коли стан пізніше загостриться.
  • Зверніть увагу на пріоритет оператора «І» над оператором «Або»: А або B та C читається як A Або (B та C)Якщо ви мали на увазі (А або Б) та В, дужки обов'язкові.
  • Застосувати не до логічного значення, не до числа: Не на утриманні читається природно. Уникайте Не 5, оскільки Not виконує побітову операцію з числами та повертає -6, а не False.

⚠️ Попередження: VBA не створює короткого замикання. У Якщо (ws нічого не дорівнює) або (ws.Name = “Дані”), тоді, друга частина все ще виконується, навіть коли перша є істинною, що викликає помилку виконання 91. Розділіть такі захисні оператори на вкладені оператори If.

XOR, Eqv та Imp Operaтори у VBA

Оператори AND, OR та NOT охоплюють майже всі повсякденні умови, але VBA надає ще три логічні оператори, які іноді виражають правило набагато чіткіше, ніж гніздо операторів If.

Operaтор Повертає True, коли Приклад Вихід
Xor Рівно одна з двох умов істинна, ніколи обидві одночасно (1 = 1) Виключає або (5 = 0) Правда
Екв. Обидві умови мають однакове значення, обидві істинні або обидві хибні (1 = 1) Рівняння (2 = 2) Правда
Імп Перша умова передбачає другу; лише True, Imp, False є false (1 = 1) Покращено (5 = 0) Помилковий

XOR — найпрактичніший з трьох. Він відповідає правилу типу «знижка застосовується до співробітника або учасника програми лояльності, але не до того, хто є і тим, і іншим». Eqv та Imp зустрічаються переважно у старішому коді та в логічних вправах, тому їх розпізнавання важливіше, ніж написання.

Завантажте Excel із кодом вище

Поширені запитання

Практичного обмеження немає, але читабельність швидко падає після трьох або чотирьох значень. Перемістіть довгу умову в булеву змінну з описовою назвою, а потім перевірте цю змінну в операторі If.

Застосований до числа, Not виконує побітову інверсію, а не логічну. Застосовується лише до порівняння або булевої змінної, такої як Not (Qty > 0), тому результатом є True або False.

Логіка збігається, але синтаксис відрізняється. Формула на робочому аркуші викликає їх як функції AND(A1>0, B1>0). VBA розміщує їх між умовами, як у випадку: Якщо A1 > 0 І B1 > 0 Тоді.

Так. Вставте умову, і помічник штучного інтелекту перепише її з чіткішими дужками або розділить на іменовані логічні змінні. Перевірте переписану умову на відповідність таблиці істинності, оскільки неправильне спрощення непомітно змінює поведінку.

Так. Введіть вираз, і помічник зі штучним інтелектом перерахує кожну комбінацію вхідних даних разом з результатом, що швидко виявить гілку, до якої ніколи не можна дістатися, або дужку, розміщену в неправильному положенні.

Підсумуйте цей пост за допомогою: