VBA Логически Operaторове: И, ИЛИ, НЕ, АКО НЕ в Excel VBA
⚡ Умно обобщение
VBA Логически OperaОператорите комбинират няколко условия в един резултат „Вярно“ или „Невярно“. Тази страница обяснява операторите „И“, „ИЛИ“ и „НЕ“ с примери за изпълними командни бутони, пълна таблица на истинност и по-малко известните оператори Xor, Eqv и Imp.

Excel VBA Логически Operaтори
Да приемем, че искате да обработите клиентска поръчка. За това искате първо да проверите дали поръчаният продукт съществува или не. Ако това стане, трябва също да проверите дали наличното количество е достатъчно. Логическите оператори са полезни в такива случаи. Логическите оператори се използват за оценка на повече от едно условие.
Всяко условие само по себе си е изградено от оператори за сравнение и връща True или False. След това логически оператор комбинира тези резултати в един краен отговор.
Основните логически оператори на Excel VBA И, ИЛИ, НЕ са изброени в таблицата по-долу:
| S / N | OperaTor | Descriptйон | Пример | Продукция |
|---|---|---|---|---|
| 1 | И | И: Това се използва за комбиниране на повече от едно условие. Ако всички условия са верни, И се оценява като истина. Ако някое от условията е невярно, И се оценява на невярно | Ако (1 = 1) и (0 = 1), тогава | фалшив |
| 2 | OR | ИЛИ: Това се използва за комбиниране на повече от едно условие. Ако някое от условията е вярно, ИЛИ връща истина. Ако всички те са false, OR връща false | Ако (1 = 1) или (5 = 0), тогава | вярно |
| 3 | НЕ | НЕ: Това работи като обратна функция. Ако условието е вярно, то връща false, а ако условието е false, връща true. | Ако не (0 = 0), тогава | фалшив |
Трите описания по-горе са по-лесни за запомняне като единна мрежа от входни данни и резултати.
Таблица на истинността за логически операции на VBA Operaтори
Таблицата на истинността изброява всяка комбинация от входни данни и резултата, който всеки оператор връща. Еднократното ѝ прочитане премахва догадките от всяко условие, което ще напишете по-късно.
| Условие А | Условие Б | А и Б | А или Б | Не А |
|---|---|---|---|---|
| Вярно | Вярно | Вярно | Вярно | Фалшив |
| Вярно | Фалшив | Фалшив | Вярно | Фалшив |
| Фалшив | Вярно | Фалшив | Вярно | Вярно |
| Фалшив | Фалшив | Фалшив | Фалшив | Вярно |
Струва си да запомните два модела. И дава True само на един от четири реда, така че стеснява селекцията. OR генерира False само на един ред, така че разширява един. НЕ приема едно условие, а не две, поради което има една собствена колона.
VBA Логически OperaПримерен източник на инструменти Code
За по-голяма простота ще сравняваме твърдо кодирани числа.
Добавете ActiveX бутони към листа от „Опция за вмъкване“.
Задайте свойствата, както е показано на изображението по-долу

Следната таблица показва свойствата, които трябва да промените, и стойностите, които също трябва да актуализирате.
| S / N | контрол | Имот | Стойност |
|---|---|---|---|
| 1 | CommandButton1 | Име | btnAND |
| Надпис | И Operaтор (1 = 1) и (0 = 0) | ||
| 2 | CommandButton2 | Име | btnOR |
| Надпис | OR Operator (1 = 1) Или (5 = 0) | ||
| 3 | CommandButton3 | Име | btnНЕ |
| Надпис | НЕ 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 Ако И OperaTor
- „Ако (1 = 1) и (0 = 0) тогава“ операторът if използва логическия оператор И, за да комбинира две условия (1 = 1) и (0 = 0). Ако и двете условия са верни, кодът над ключовата дума „Else“ се изпълнява. Ако и двете условия не са верни, кодът под ключовата дума „Else“ се изпълнява.
И двете условия са верни тук, така че щракването върху бутона показва „И оценено като TRUE“.
Добавете следния код към 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 Ако ИЛИ OperaTor
- „Ако (1 = 1) Или (5 = 0) Тогава“ Изразът if използва логическия оператор OR, за да комбинира две условия (1 = 1) или (5 = 0). Ако някое от условията е вярно, се изпълнява кодът по-горе с ключовата дума Else. Ако и двете условия са неверни, се изпълнява кодът по-долу с ключовата дума Else.
Първото условие е вярно, а второто е невярно, така че OR все още връща true и съобщението гласи „OR оценено като TRUE“.
Добавете следния код към 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 Ако НЕ OperaTor
- „Ако не (0 = 0) тогава“ Функцията If Not на VBA използва логическия оператор NOT, за да отмени резултата от условието на оператора if. Вътрешното условие (0 = 0) е true, така че Not го превръща в false и кодът под ключовата дума „Else“ се изпълнява. Ако вътрешното условие беше false, Not щеше да го превърне в true и кодът над „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 очевидно и предотвратяване на грешка, когато състоянието по-късно се влоши.
- Имайте предвид предимството на „И“ пред „Или“: А или Б и В се чете като А или (Б и В)Ако имахте предвид (А или Б) и В, скобите са задължителни.
- Прилага се Not към булева стойност, not към число: Не е на изчакване чете се естествено. Избягвайте Не е 5, защото Not извършва побитова операция с числа и връща -6, а не False.
⚠️ Предупреждение: VBA не прави късо съединение. В Ако (ws е нищо) или (ws.Name = „Данни“) тогава, втората част все още се изпълнява, дори когато първата е вярна, което поражда грешка по време на изпълнение 91. Разделете такива предпазители на вложени If оператори.
XOR, Eqv и Imp Operaинструменти във VBA
И, ИЛИ и НЕ покриват почти всяко ежедневно условие, но VBA предоставя още три логически оператора, които понякога изразяват правило много по-ясно от множество If оператори.
| OperaTor | Връща True, когато | Пример | Продукция |
|---|---|---|---|
| xor | Точно едно от двете условия е вярно, никога и двете едновременно | (1 = 1) X или (5 = 0) | Вярно |
| Екв. | И двете условия имат еднаква стойност, и двете са верни или и двете са неверни | (1 = 1) Уравнение (2 = 2) | Вярно |
| дяволче | Първото условие предполага второто; само True и Imp False е false. | (1 = 1) Имп. (5 = 0) | Фалшив |
Xor е най-практичният от трите. Той отговаря на правило като „отстъпка се прилага за член на персонала или член на програмата за лоялност, но не и за някой, който е и двете“. Eqv и Imp се появяват главно в по-стар код и в логически упражнения, така че разпознаването им е по-важно от писането им.
Изтеглете Excel, съдържащ горния код
