VBA Ако изявление
Ако тогава
VBA Ако инструкциите ви позволяват да проверите дали изразите са TRUE или FALSE, изпълнявайки различен код въз основа на резултатите.Нека разгледаме един прост пример:
1 | Ако Range ("a2"). Стойност> 0 Тогава Range ("b2"). Value = "Positive" |
Това проверява дали стойността в Обхват А2 е по -голяма от 0. Ако е така, задаване на Обхват В2 равно на „Положително“
Забележка: При условия на тестване ще използваме операторите за сравнение =,>, <,, =. Ще ги обсъдим по -подробно по -късно в статията.Ето синтаксиса за прост едноредов оператор If:
1 | Ако [test_expression] тогава [действие] |
За да улесните четенето, можете да използвате знак за продължаване на ред (подчертаване), за да разширите операторите If до два реда (както направихме на горната снимка):
12 | Ако [test_expression] тогава _[действие] |
12 | Ако Range ("a2"). Стойност> 0 Тогава _Диапазон ("b2"). Стойност = "Положително" |
Край Ако
Горното „едноредово“ изявление if работи добре, когато тествате едно условие. Но тъй като вашите IF изявления стават по -сложни с множество условия, ще трябва да добавите „End If“ в края на if инструкцията:
123 | Ако Range ("a2"). Стойност> 0 ТогаваДиапазон ("b2"). Стойност = "Положително"Край Ако |
Тук синтаксисът е следният:
123 | Ако [test_expression] тогава[действие]Край Ако |
Краят Ако означава края на израза if.
Сега нека добавим ElseIF:
ElseIF - Множество условия
ElseIf се добавя към съществуващ оператор If. В противен случай тества дали е изпълнено условие
САМО, ако предишните условия не са изпълнени.В предишния пример тествахме дали стойността на клетката е положителна. Сега също ще тестваме дали стойността на клетката е отрицателна с ElseIf:
12345 | Ако Range ("a2"). Стойност> 0 ТогаваДиапазон ("b2"). Стойност = "Положително"ElseIf Range ("a2"). Стойност <0 ТогаваДиапазон ("b2"). Стойност = "Отрицателно"Край Ако |
Можете да използвате множество ElseIfs за тестване за множество условия:
1234567891011 | Sub If_Multiple_Conditions ()Ако Range ("a2"). Value = "Cat" ТогаваДиапазон ("b2"). Стойност = "Мяу"ElseIf Range ("a2"). Value = "Dog" ТогаваRange ("b2"). Value = "Woof"ElseIf Range ("a2"). Value = "Duck" ТогаваДиапазон ("b2"). Стойност = "Quack"Край АкоEnd Sub |
Сега ще добавим един Иначе:
Иначе
The Иначе ще работи, ако не са изпълнени други предишни условия.
Ще завършим нашия пример, като използваме Else, за да посочим, че ако стойността на клетката не е положителна или отрицателна, тя трябва да е нула:
1234567 | Ако Range ("a2"). Стойност> 0 ТогаваДиапазон ("b2"). Стойност = "Положително"ElseIf Range ("a2"). Стойност <0 ТогаваДиапазон ("b2"). Стойност = "Отрицателно"ИначеДиапазон ("b2"). Стойност = "Нула"Край Ако |
Ако-Друго
Най-често срещаният тип оператор If е прост If-Else:
1234567 | Sub If_Else ()Ако Range ("a2"). Стойност> 0 ТогаваДиапазон ("b2"). Стойност = "Положително"ИначеДиапазон ("b2"). Стойност = "Не положителен"Край АкоEnd Sub |
Вложени IF
Можете също така да „вмъкнете“ ако изявленията един в друг.
1234567891011 | Под -вложено_Ifs ()Ако Range ("a2"). Стойност> 0 ТогаваДиапазон ("b2"). Стойност = "Положително"ИначеАко Range ("a2"). Стойност <0 ТогаваДиапазон ("b2"). Стойност = "Отрицателно"ИначеДиапазон ("b2"). Стойност = "Нула"Край АкоКрай АкоEnd Sub |
АКО - Или, И, Xor, Не
След това ще обсъдим логическите оператори: Или, И, Xor, Не.
Ако Or
The Или операторски тестове, ако поне едно условие е изпълнено.
Следният код ще тества дали стойността в диапазон А2 е по -малка от 5000 или по -голяма от 10 000:
123 | Ако Range ("a2"). Стойност 10000 ТогаваДиапазон ("b2"). Стойност = "Извън диапазона"Край Ако |
Можете да включите няколко Ors в един ред:
123 | Ако Range ("a2"). Стойност 10000 Или Range ("a2"). Value = 9999 ТогаваДиапазон ("b2"). Стойност = "Извън диапазона"Край Ако |
Ако ще използвате няколко Ors, препоръчително е да използвате знак за продължение на ред, за да улесните четенето на кода:
123456 | Ако Range ("a2"). Стойност <5000 Или _Диапазон ("a2"). Стойност> 10000 Или _Диапазон ("a2"). Стойност = 9999 ТогаваДиапазон ("b2"). Стойност = "Извън диапазона"Край Ако |
Ако И
Операторът And ви позволява да проверите дали ВСИЧКИ условия са изпълнени.
123 | Ако Range ("a2"). Стойност> = 5000 And Range ("a2"). Value <= 10000 ТогаваRange ("b2"). Value = "In Range"Край Ако |
Ако Xor
Операторът Xor ви позволява да проверите дали е изпълнено точно едно условие. Ако са изпълнени нулеви условия Xor ще върне FALSE, Ако са изпълнени две или повече условия, Xor също ще върне false.
Рядко съм виждал Xor да се използва във VBA програмиране.
Ако не
Операторът Not се използва за преобразуване на FALSE в TRUE или TRUE в FALSE:
123 | Sub IF_Not ()MsgBox Not (True)End Sub |
Забележете, че операторът Not изисква скоби около израза за превключване.
Операторът Not може да се приложи и към операторите If:
123 | Ако не (Обхват ("a2"). Стойност> = 5000 И Обхват ("a2"). Стойност <= 10000) ТогаваДиапазон ("b2"). Стойност = "Извън диапазона"Край Ако |
Ако Сравнения
Когато правите сравнения, обикновено ще използвате един от операторите за сравнение:
Сравнителен оператор | Обяснение |
= | Равна на |
| Не е равно на |
> | По-голяма от |
>= | По -голямо или равно на |
< | По-малко от |
<= | По -малко или равно на |
Можете обаче да използвате всеки израз или функция което води до TRUE или FALSE
Ако - булева функция
Когато изграждате изрази за If изявления, можете също да използвате всяка функция, която генерира TRUE или False. VBA има няколко от тези функции:
Функция | Описание |
IsDate | Връща TRUE, ако изразът е валидна дата |
Празно е | Проверете за празни клетки или неопределени променливи |
IsError | Проверете за стойности на грешки |
IsNull | Проверете за NULL стойност |
IsNumeric | Проверете за числова стойност |
Те могат да бъдат наречени така:
1 | If IsEmpty (Range ("A1"). Value) Тогава MsgBox "Cell Empty" |
Excel също има много допълнителни функции, които могат да бъдат извикани с помощта на WorksheetFunction. Ето пример за функцията Excel IsText:
12 | Ако Application.WorksheetFunction.IsText (Диапазон ("a2"). Стойност) Тогава _MsgBox "Клетката е текст" |
Можете също така да създадете свои собствени потребителски функции (UDF). По -долу ще създадем проста булева функция, която връща TRUE. Тогава ще извикаме тази функция в нашия оператор If:
1234567891011 | Sub If_Function ()Ако TrueFunction ТогаваMsgBox "Вярно"Край АкоEnd SubФункция TrueFunction () Като булеваTrueFunction = ИстинаКрайна функция |
Сравняване на текст
Можете също да сравнявате текст, подобен на сравняване на числа:
Когато сравнявате текст, трябва да имате предвид „Делото“ (горен или долен). По подразбиране VBA счита букви с различни букви като несъвпадащи. С други думи, „А“ „а“.Ако искате VBA да игнорира регистъра, трябва да добавите декларацията Option Compare Text в горната част на вашия модул:
1 | Опция Сравняване на текст |
След като направите тази декларация „А“ = „а“:
12345 | Опция Сравняване на текстSub If_Text ()MsgBox "a" = "A"End Sub |
VBA Ако харесвате
VBA Like Operator ви позволява да правите неточни сравнения на текст. Щракнете върху връзката „Like Operator“, за да научите повече, но по -долу ще покажем основен пример:
12345678 | Dim strName като StringstrName = "Мистър Чарлз"Ако strName като "Mr*" ТогаваMsgBox "Вярно"ИначеMsgBox "False"Край Ако |
Тук използваме заместваща звезда „*“. * Означава произволен брой произволни знаци. Така че горният оператор If ще върне TRUE. Операторът Like е изключително мощен, но често недостатъчно използван инструмент за работа с текст.
Ако цикли
VBA Loops ви позволява да повтаряте действия. Комбинирането на IF-ELSE с цикли е чудесен начин за бърза обработка на много изчисления.
Продължавайки с нашия положителен / отрицателен пример, ще добавим For Every Loop, за да преминем през редица клетки:
1234567891011121314 | Sub If_Loop ()Dim Cell като диапазонЗа всяка клетка в обхвата ("A2: A6")Ако Cell.Value> 0 ТогаваCell.Offset (0, 1) .Value = "Положително"ElseIf Cell.Value <0 ТогаваCell.Offset (0, 1) .Value = "Отрицателно"ИначеCell.Offset (0, 1) .Value = "Нула"Край АкоСледваща клеткаEnd Sub |
Ако други примери
Сега ще разгледаме някои по -конкретни примери.
Проверете дали клетката е празна
Този код ще провери дали клетката е празна. Ако е празно, ще игнорира клетката. Ако не е празно, то ще изведе стойността на клетката в клетката вдясно:
1234567 | Sub If_Cell_Empty ()Ако Range ("a2"). Стойност "" ТогаваДиапазон ("b2"). Стойност = Обхват ("a2"). СтойностКрай АкоEnd Sub |
Проверете дали клетката съдържа специфичен текст
Функцията Instr тества дали низ от текст е намерен в друг низ. Използвайте го с оператор If, за да проверите дали клетката съдържа конкретен текст:
123 | Ако Instr (Диапазон ("A2"). Стойност, "текст")> 0 ТогаваMsgbox „Текстът е намерен“Край Ако |
Проверете дали клетката съдържа текст
Този код ще тества дали клетката е текст:
1234567 | Sub If_Cell_Is_Text ()Ако Application.WorksheetFunction.IsText (Диапазон ("a2"). Стойност) След товаMsgBox "Клетката е текст"Край АкоEnd Sub |
Ако отидете
Можете да използвате резултата от оператор If, за да „отидете“ в друг раздел на кода.
12345678910 | Sub IfGoTo ()Ако IsError (Cell.value) ТогаваОтидете на ПропусканеКрай Ако- Някакъв кодексПропускане:End Sub |
Изтриване на ред, ако клетката е празна
С помощта на Ifs и цикли можете да проверите дали клетката е празна и ако е така, изтрийте целия ред.
123456789 | Sub DeleteRowIfCellBlank ()Dim Cell As RangeЗа всяка клетка в обхвата ("A2: A10")If Cell.Value = "" Тогава Cell.EntireRow.DeleteСледваща клеткаEnd Sub |
Ако MessageBox Да / Не
С кутии за съобщения VBA можете да помолите потребителя да избере от няколко опции. Полето за съобщение „Да / Не“ изисква от потребителя да избере „Да“ или „Не“. Можете да добавите поле за съобщение „Да / Не“ към процедура, за да попитате потребителя дали би искал да продължи изпълнението на процедурата или не. Вие обработвате въвеждането на потребителя с помощта на оператор If.Ето полето за съобщения „Да/Не“ на практика:
123456789101112 | Sub MsgBoxVariable ()Затъмнен отговор Като цяло числоanswer = MsgBox ("Искате ли да продължите?", vbQuestion + vbДа Не)Ако отговор = vbДа ТогаваMsgBox "Да"ИначеMsgBox "Не"Край АкоEnd Sub |
VBA If, ElseIf, Else in Access VBA
Функциите If, ElseIf и Else работят точно същите в Access VBA като в Excel VBA.
Можете да използвате оператор If, за да проверите дали има записи в набор от записи.