Добавить в корзинуПозвонить
Найти в Дзене
Макрос решает

Операторы НЕ РАВНО и NOT в VBA: Логика, которой стоит научиться

Когда вы программируете макросы в Excel, особенно при автоматизации анализа данных или построении логики принятия решений, наступает момент, когда "не равно" становится важнее, чем "равно". Сегодня мы разберём два мощных инструмента для таких ситуаций: Разберёмся, чем они отличаются, как работают и где их использовать — с примерами кода, объяснениями и отладкой. Оператор <> — это прямой способ сравнить два значения и проверить, не равны ли они между собой. Пример: If Range("C6").Value <> 20 Then Range("E6").Value = "Плохо" Else Range("E6").Value = "Хорошо" End If Что делает этот код: Допустим, в ячейке C6 стоит значение 30. Sub TestNotEqual() If Range("C6").Value <> 20 Then Range("E6").Value = "Плохо" Else Range("E6").Value = "Хорошо" End If End Sub 2. Нажмите F8 для построчной отладки. 3. Excel увидит, что 30 <> 20 — это Истина, значит:
→ В ячейку E6 будет записано "Плохо". 4. Если вы поменяете C6 на 20 и снова выполните код:
→ Выражение станет Ложью, и в E6 появится "Хорошо". Испол
Оглавление

Когда вы программируете макросы в Excel, особенно при автоматизации анализа данных или построении логики принятия решений, наступает момент, когда "не равно" становится важнее, чем "равно". Сегодня мы разберём два мощных инструмента для таких ситуаций:

  • Оператор <> — неравенство
  • Логический оператор Not — инверсия логики

Разберёмся, чем они отличаются, как работают и где их использовать — с примерами кода, объяснениями и отладкой.

📌 1. Что такое оператор <> (не равно)?

Оператор <> — это прямой способ сравнить два значения и проверить, не равны ли они между собой.

Пример:

If Range("C6").Value <> 20 Then
Range("E6").Value = "Плохо"
Else
Range("E6").Value = "Хорошо"
End If

Что делает этот код:

  • Сравнивает содержимое ячейки C6 с числом 20.
  • Если C6 не равно 20 → ячейка E6 получает значение "Плохо".
  • Если C6 равно 20 → в E6 пишется "Хорошо".

🔎 Логика за кадром:

  • <> — альтернатива =, но в обратную сторону.
  • Это один из шести базовых операторов сравнения в VBA:
    =, >, <, >=, <=, <>

🛠 2. Пошаговый пример с <>: отладка кода

Допустим, в ячейке C6 стоит значение 30.

Шаги в редакторе VBA:

  1. Напишите макрос:
Sub TestNotEqual()
If Range("C6").Value <> 20 Then
Range("E6").Value = "Плохо"
Else
Range("E6").Value = "Хорошо"
End If
End Sub

2. Нажмите F8 для построчной отладки.

3. Excel увидит, что 30 <> 20 — это Истина, значит:

→ В ячейку E6 будет записано "Плохо".

4. Если вы поменяете C6 на 20 и снова выполните код:

→ Выражение станет Ложью, и в E6 появится "Хорошо".

🧠 Подсказка:

Используйте <> в любых условиях, где важен факт отличия значений, а не совпадение.

🧩 3. Что такое оператор Not в VBA?

Логический оператор Not инвертирует логическое выражение. Если условие возвращает True, Not превратит его в False. И наоборот.

Пример:

If Not Range("C6").Value = 20 Then
Range("E6").Value = "Плохо"
Else
Range("E6").Value = "Хорошо"
End If

Этот код делает то же самое, что и пример с <>, только по-другому:

  • Если C6 не равно 20, тогда в E6 будет "Плохо".
  • Но технически условие сформулировано как "не истина":
    Range("C6").Value = 20 → истина
    Not True → ложь
    Значит, идём по ветке Else.

🤹 Зачем два способа?

  • <> — читается проще.
  • Not — мощнее, когда вы работаете с более сложными условиями и функциями, особенно при отрицании булевых флагов.

🔁 4. Отличия <> и Not: когда использовать?

-2

📋 5. Сравнение в логике IF: варианты конструкций

' Вариант 1: напрямую с неравно
If Range("A1").Value <> "Готово" Then
MsgBox "Документ не готов!"
End If
' Вариант 2: через логический Not
If Not Range("A1").Value = "Готово" Then
MsgBox "Документ не готов!"
End If

Оба варианта делают одно и то же. Выбор зависит от вашего стиля и сложности выражения.

🧪 6. Комбинирование условий: AND, OR, NOT

Теперь начинается настоящая магия — объединение логических операторов.

Пример:

If Not (Range("A1").Value = "Готово" Or Range("B1").Value = "Подписано") Then
MsgBox "Ошибка: не завершены действия!"
End If

Что делает этот код:

  • Проверяет, что оба условия не выполнены.
  • OR внутри → если хотя бы одно истинно, результат — истина.
  • Not снаружи инвертирует всё → мы получаем ложь, если хотя бы одно из условий выполнено.

Это полезно, когда нужно запретить продолжение процесса, если что-то не так.

🔄 7. Под капотом: как работает Not в отладке

Отладка — это лучший способ понять, как работает логика.

Пример пошагово:

  1. В C6 → 20

2. Код:

If Not Range("C6").Value = 20 Then
Range("E6").Value = "Плохо"
Else
Range("E6").Value = "Хорошо"
End If

3. F8 показывает:

  • Range("C6").Value = 20 → True
  • Not True → False
  • Значит, выполнится Else

Поменяйте значение C6 на 10:

  • 10 = 20 → False
  • Not False → True → в E6 → "Плохо"

Это отличная тренировка булевого мышления.

8. Лучшие практики использования <> и Not

  • Если условие простое — используйте <>.
  • Если выражение сложное или вложенное — Not читается лучше.
  • Не забывайте использовать скобки:
If Not (условие) Then
  • Это избавит от логических ошибок в сложных выражениях.

🧠 9. Что важно помнить при использовании этих операторов

  • Внимательно следите за типами данных. Сравнивайте строки со строками, числа с числами.
  • Логика Not может вводить в заблуждение — всегда отлаживайте сложные условия.
  • Неравенство (<>) не всегда очевидно. Иногда проще написать If Not A = B — особенно когда A и B — булевы переменные.

🎓 Вывод

Операторы <> и Not — это две стороны одной медали, когда речь идёт о контроле логики в макросах. Они позволяют проверять, что должно не происходить — и реагировать на это. Освоив их, вы сможете писать более гибкие, чистые и надёжные макросы.

🧠 Ваша мини-задача

Создайте макрос, который проверяет:

  • Если в A1 не написано "Подписано", и в B1 не стоит галочка (TRUE), то в C1 появляется надпись "Ожидает завершения".

Иначе — "Готово".

А пока подпишитесь на канал и оставьте свой комментарий внизу