Как да настроите смартфони и компютри. Информационен портал
  • У дома
  • Желязо
  • Функцията за избор на случай проверява всички условия. Оператор на клон "Select Case"

Функцията за избор на случай проверява всички условия. Оператор на клон "Select Case"

Структурите за управление ви позволяват да контролирате последователността на изпълнение на програмата. Без контролни оператори всички програмни оператори ще се изпълняват отляво надясно и отгоре надолу. Въпреки това, понякога се изисква многократно автоматично изпълнение на определен набор от инструкции или решаване на проблема по различен начин в зависимост от стойностите на променливите или параметрите, посочени от потребителя по време на изпълнение. За това се използват контролни конструкции и цикли.

VBA поддържа следните конструкции за решения:

Ако. ... ... Тогава. ... ... иначе

6.1 Конструкцията If. ... ... Тогава

Ако. ... ... Тогава се използва, когато е необходимо да се изпълни един или група оператори в зависимост от някакво условие. Синтаксисът на тази конструкция ви позволява да я посочите на един ред или в няколко реда на програмата:

If условие Тогава израз If условие Тогава израз End If

Условието обикновено е просто сравнение, но може да бъде всеки израз с изчислена стойност. Тази стойност се тълкува като False, ако е нула, и всяка различна от нула се счита за True. Ако условието е вярно, тогава се изпълняват всички изрази след ключовата дума Then. За да изпълните условно един израз, можете да използвате както едноредов синтаксис, така и многоредов синтаксис (блокова конструкция).

Следните два оператора са еквивалентни:

Ако има дата< Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

Имайте предвид, че синтаксисът на оператора If. ... ... Тогава не използва израза End If за един ред. За да изпълните поредица от изрази, ако условието е вярно, използвайте блоковата клауза If. ... ... Тогава. ... ... Край, ако.

Ако има дата< Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If

Ако условието е невярно, тогава операторите след ключовата дума Then не се изпълняват и контролата се предава на следващия ред (или реда след израза End If в блокова конструкция).

6.2 Ако е конструиран. ... ... Тогава. ... ... иначе

дефинира няколко блока от оператори, единият от които ще бъде изпълнен в зависимост от условието:

Ако условие1 Тогава израз1 ElseIf условие2 Тогава израз2. ... ... Else израз -n Край Ако

Когато се изпълни, първо се проверява условие1. Ако е false, VBA проверява следващото условие2 и така нататък, докато не намери истинско условие. Когато VBA го намери, той изпълнява съответния блок от оператори и след това прехвърля контрола към оператора след оператора End if. В тази конструкция можете да включите блок от оператори Else, който VBA изпълнява, ако не е изпълнено нито едно от условията.

Ако. ... ... Тогава. ... ... ElseIf наистина е само специален случай на конструкцията If. ... ... Тогава. ... ... иначе. Имайте предвид, че тази конструкция може да съдържа произволен брой ElseIf блокове или дори нито един. Блокът Else може да бъде включен независимо от наличието или, обратно, отсъствието на блокове ElseIf.

Подпример 1 () Dim a Като единичен, b като единичен, x като единичен дим z Като четене на двойно повикване ("A1", a) четене на повикване ("B1", b) Нека x = CSng (InputBox ("enter x" , "Въвеждане на данни", 0)) Ако x<= a Then z = Sin(x) ElseIf x >= b Тогава z = Tan (x) Друго: z = Cos (x) Край, ако извикване ("C1", z) Край под

Имайте предвид, че можете да добавите произволен брой блокове на Elself към вашия израз If. ... ... Тогава. Въпреки това, броят на Elself блоковете може да стане толкова голям, че If. ... ... Тогава ще стане много тромаво и неудобно. В такава ситуация трябва да се използва друга конструкция за вземане на решения – Select Case.

6.3 Изберете Конструкция на корпуса

Конструкцията Select Case е алтернатива на конструкцията If. ... ... Тогава. ... ... Иначе в случай на изпълнение на блок, състоящ се от голям набор от оператори. Конструкцията Select Case предоставя възможност, подобна на конструкцията If. ... ... Тогава. ... ... Иначе, но това прави кода ви по-четлив, когато имате множество възможности за избор.

Конструкцията Select Case работи с един тестван израз, който се оценява веднъж при влизане в конструкцията. След това VBA сравнява резултата със стойностите, посочени в операторите Case на конструкцията. Ако бъде намерено съвпадение, се изпълнява блокът на оператора, свързан с оператора Case:

Изберете Case test_expression]]. ... ... ] Край Изберете

Всеки списък с изрази е списък от една или повече стойности. Ако има повече от една стойност в един списък, те се разделят със запетаи. Всеки блок от оператори съдържа множество оператори или нито един. Ако се окаже, че изчислената стойност на тествания израз съответства на стойности от няколко оператора Case, тогава се изпълнява блокът от оператори, свързани с първия оператор Case от всички намерени съвпадения. VBA изпълнява блок на оператора, свързан с оператор Case Else (обърнете внимание, че не е задължителен), ако не бъде намерено съвпадение между валидираната стойност на израза и стойностите от всички списъци с оператори Case.

Нека разгледаме пример за изчисляване на функцията

Подпример 2 () Const pi2 = 1,57 Dim x Като единичен Dim z Като двоен Нека x = CSng (InputBox ("enter x", "Data input", 0)) Изберете Case x Case -pi2 z = Sin (x) Case 0 z = Cos (x) Case pi2 z = Tan (x) Case Else MsgBox "Невалидни входни данни!" Exit Sub End Select Call Out ("D1", z) End Sub

Обърнете внимание, че конструкцията Select Case оценява израза само веднъж при въвеждането му и в If. ... ... Тогава. ... ... В противен случай се оценява различен израз за всеки израз на Elself. Ако. ... ... Тогава. ... ... Else може да бъде заменен с Select Case само ако операторът If и всеки израз Elself оценяват един и същ израз.

ВИЗУАЛЕН БАЗОВ ЕЗИК НА ПРОГРАМИРАНЕ. БРАНОВО ПРОГРАМИРАНЕ

Разклоняването във Visual Basic е организирано с помощта на:

  • условно IF изявление;
  • вградена IIF функция;
  • изберете оператор CASE.

За да проверите едно условие и да изпълните оператор или блок от изрази, използвайте условно АКО ... ТОГАВА... Този оператор може да се използва с различен синтаксис: едноредов (линеен) и многоредов (блоков).

Линейният оператор има следния синтаксис:

Ако<условие>Тогава<операторы!>

Блоковият израз има следния синтаксис:

Ако<условие>Тогава
<блок операторов 1>
Край, ако

Ако посоченото условие е вярно, блокът на оператора се изпълнява; в противен случай блокът на оператора2. Ако клаузата Else не е посочена,Ако условието е изпълнено, контролата незабавно се предава на следващия оператор след If.

Инструкцията If може да бъде вложена, тоест може да бъде вътре в блокове на оператори. За да се тества повече от едно условие и да се изпълни един от няколко блока на оператора, се използва разширен условен оператор на формуляра:

Ако<условие 1>Тогава
<блок операторов 1>
Себе си<условие 2>Тогава
<блок операторов 2>
Себе си<условие n>Тогава
<блок операторов n>
Край, ако

За да изберете една от стойностите в зависимост от изпълнението или неизпълнението на определено условие, се използва условната функция IIF, която има следния синтаксис:

IIF (<условие>, <значение1>, <значение2>)

Тази функция връща стойност 1, ако условието е вярно и стойност 2, ако условието е невярно.

Като условие можете да използвате булев израз, който връща True или

False или който и да е аритметичен израз (нулата е еквивалентна на False, а ненулата е True).

Инструкция SELECT CASEсе използва за тестване на едно условие и изпълнение на един от няколко блока на инструкциите.

Формат на запис на оператора:

Изберете Case<проверяемое выражение>
Случай<список выражений 1>
<операторы 1>Случай<список выражений 2>
<операторы 2>Случай<список выражений 3>
<операторы 3>
Друг случай
<операторы группы Else>
Край Изберете

Изразът, който се тества, се оценява в началото на оператора Select Case. Този израз може да връща всякакъв тип стойност (булева, числова, низ).

Списъкът с изрази е един или повече изрази, разделени със стандартен разделителен знак (точка и запетая).

Когато операторът се изпълнява, се проверява дали поне един от елементите на този списък съвпада с израза, който се тества.

Този списък на изрази за издръжка може да приеме една от следните форми:

  • <выражение>- проверява съвпадението на дадения израз с един от изразите - елементите на списъка;
  • <выражение 1>Че<выражение 2>- проверява дали посоченият израз е в рамките на посочения диапазон;
  • < Is <логический оператор> < выражение>- проверява изпълнението на посоченото условие за посочения израз.

И в днешната публикация ще обсъдим изявлението за избор на VBA. VBA Select Case може да се използва вместо сложни оператори на Excel Nested If. Това прави VBA кода по-бърз за изпълнение и по-лесен за разбиране.

Изявлението Select-Case (наричано още като Switch Case на някои езици) проверява променлива или израз за различни случаи (стойности). Ако някой от случая стане вярно, тогава се изпълнява само този случай и програмата игнорира всички останали случаи.

Ако си спомняте в последната ни публикация говорихме за „как можеш“.

Синтаксис на VBA Select Case Statement:

Синтаксисът е както следва:

Изберете Състояние на делото
Стойност на делото_1
Код за изпълнение, когато условие = стойност_1
Стойност на делото_2
Код за изпълнение, когато условие = стойност_2
Стойност на делото_3
Код за изпълнение, когато условие = стойност_3
Друг случай
Код за изпълнение, когато всички останали случаи са False
Край Изберете

Тук „Условие“ се отнася до променливата или израза, който трябва да бъде тестван и въз основа на който ще бъде изпълнен всеки от сегментите на кода.

„Стойност_1“, „стойност_2“ и „стойност_3“ са възможните резултати от „Условието“. Всеки път, когато някоя от тези стойности съответства на „Условие“, тогава съответният блок Case ще се изпълни.

„Else“ е вид стойност на случая по подразбиране, която ще се изпълни само когато всички горепосочени оператори Case доведат до False. Случаят „Else“ не е задължителен, но като цяло се счита за добра практика да го използвате.

Примери за Select-Case във VBA:

Сега нека преминем към някои практически примери за изявления на случаи.

Пример 1:Изберете Декларация с израз.

В примера по-долу сме предоставили условие (т.е. a = b) към оператора Select Case. Ако това е вярно, тогава ще се изпълни блок „Case True“, а ако е False, тогава ще се изпълни блок „Case False“.

Sub Select_Case_Example () "Въведете стойността за променливи a = InputBox (" Въведете стойността за A: ") b = InputBox (" Въведете стойността за B: ")" Оценяване на израза Изберете Case a = b Case True MsgBox "The изразът е TRUE "Case False MsgBox" Изразите са FALSE "End Select End Sub

Забележка:В този код се използва за получаване на стойности от потребителя.

Пример 2:Изявление на case за проверка на текстови низове

В този пример ще сравним текстови низове в операторите Case. Ако бъде намерено съвпадение, съответният блок case ще се изпълни, в противен случай ще се изпълни блокът „Case Else“.

Sub Select_Case_Example () "Въведете стойността за променливите fruit_name = InputBox (" Въведете името на плода: ")" Оценяване на израза Изберете Case fruit_name Case "Apple" MsgBox "Въведете Apple" Case "Mango" MsgBox "Въведете Mango" Case „Оранжев“ MsgBox „Въхте в оранжево“ Случай Друг MsgBox „Не знаех този плод! „Край Изберете Край Под

Пример 3:Изявление за проверка на числата

В примера по-долу ще проверим дали въведеното от потребителя число е по-малко или по-голямо от 5.

Sub Select_Case_Example () "Въведете стойността за променливи Num = InputBox (" Въведете произволно число между 1 до 10: ")" Оценяване на израза Select Case Num Case Is< 5 MsgBox "Your Number is less than 5" Case Is = 5 MsgBox "Your Number is Equal to 5" Case Is >5 MsgBox "Вашият номер е по-голям от 5" Край Изберете Край Под

Забележка:Можеш да използваш ISключова дума с Case Statement за сравняване на стойности.

Пример 4:Изберете изявление Case, за да проверите множество условия в един случай.

В този пример ще помолим потребителя да въведе произволно число от 1-10. След това ще проверим дали числото е четно или нечетно, като използваме множество условия в изявлението case. Забележете, че тук използвах „,“ (запетая), за да сравня множество условия в един и същи случай.

Sub Select_Case_Example () "Въведете стойността за променливи Num = InputBox (" Въведете произволно число между 1 до 10: ")" Оценяване на израза Изберете Case Num Case 2, 4, 6, 8, 10 MsgBox "Вашето число е четно." Случай 1, 3, 5, 7, 9 MsgBox "Вашият номер е нечетен." Друг случай MsgBox "Вашият номер е извън обхвата." Край Изберете Край под

Забележка:Знам, че има по-лесни методи за проверка дали дадено число е четно или нечетно, но използвах този пример само за да обясня как можете да проверите множество условия в един оператор case.

Пример 5:Изявление за случай за проверка на непрекъснат диапазон като условие.

Тук ще тестваме непрекъснат диапазон като условие. Ще помолим потребителя да въведе произволно число между 1-10, ако числото е между 1 и 5 (включително 1 и 5), тогава „Случай от 1 до 5“ ще бъде „Вярно“, ако въведеното от потребителя число е между 6 и 10 (включително и 6, и 10), тогава „Случай 6 до 10“ ще бъде „Вярно“, ако и двата предишни случая са „False“, тогава „Case Else“ ще бъде изпълнено.

Sub Select_Case_Example () "Въведете стойността за променливи Num = InputBox (" Въведете произволно число между 1 до 10: ")" Оценяване на израза Изберете Case Num Case 1 To 5 MsgBox "Вашият номер между 1 до 5" Case 6 To 10 MsgBox "Вашият номер между 6 и 10" Case Else MsgBox "Вашият номер е извън обхвата." Край Изберете Край под

И така, това беше всичко за VBA Select Case Statement. Чувствайте се свободни да споделите вашите мисли по тази тема.

Относно Анкит Каул

Ankit е основател на Excel Trick. Той е технологичен маниак, който обича да седи пред приятелката си с квадратна глава (неговия компютър) по цял ден. : Д. Ankit има силна страст към изучаването на Microsoft Excel. Единствената му цел е да ви превърне в "Excel Geeks".

Най-важните условни оператори, използвани в Excel VBA, са операторите Ако… Тогаваи Изберете Case... И двата израза проверяват едно или повече условия и в зависимост от резултата извършват различни действия. След това ще говорим за тези два условни оператора по-подробно.

Visual Basic Ако... Тогава изявление

Оператор Ако… Тогавапроверява условието и, ако е TRUE, тогава се изпълнява посоченият набор от действия. Може също да се дефинира набор от действия, които да бъдат изпълнени, ако условието е FALSE.

Синтаксис на оператора Ако… Тогавакато този:

Ако Условие1Тогава
Действия, ако условие 1 е изпълнено
ElseIf Условие2Тогава
Действия, ако условие 2 е изпълнено
иначе
Действия в случай, че не е изпълнено нито едно от Условията
Край, ако

В този израз елементите ElseIfи иначеоператорските условия може да не се използват, ако не са необходими.

По-долу е даден пример, в който се използва операторът Ако… Тогавацветът на запълване на активната клетка се променя в зависимост от стойността в нея:

Ако ActiveCell.Value< 5 Then ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет ElseIf ActiveCell.Value < 10 Then ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End If

Имайте предвид, че веднага щом условието стане вярно, изпълнението на условния оператор се прекъсва. Следователно, ако стойността на променливата ActiveCellпо-малко от 5, тогава първото условие става вярно и клетката става зелена. След това изпълнението на оператора Ако… Тогавае прекъснато и други условия не се проверяват.

Изберете Case Statement във Visual Basic

Оператор Изберете Caseподобно на оператора Ако… Тогавав това, че той също така проверява истинността на условието и в зависимост от резултата избира една от опциите.

Синтаксис на оператора Изберете Caseкато този:

Изберете Case Изразяване
Случай Стойност1
Действия в случай, че резултатът от Expression съвпада със стойност 1
Случай Стойност2
Действия в случай, че резултатът от Expression съвпада със стойност 2

Друг случай
Действия в случай, че резултатът от Expression не съвпада с нито една от изброените опции Стойности
Край Изберете

елемент Друг случайе по избор, но се препоръчва за обработка на неочаквани стойности.

В следващия пример, използвайки конструкцията Изберете Caseцветът на запълване на текущата клетка се променя в зависимост от стойността в нея:

Изберете Case ActiveCell.Value Case Is<= 5 ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет Case 6, 7, 8, 9 ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Case 10 ActiveCell.Interior.Color = 65535 "Ячейка окрашивается в жёлтый цвет Case 11 To 20 ActiveCell.Interior.Color = 10498160 "Ячейка окрашивается в лиловый цвет Case Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End Select

Горният пример показва как можете да зададете стойност за елемент по различни начини Случайв строителството Изберете Case... Това са начините:

Случаят е<= 5 По този начин, използвайки ключовата дума Случаят евъзможно е да се провери дали стойността удовлетворява Изразисъстояние като <=5 .
Случай 6, 7, 8, 9 Ето как можете да проверите дали стойността е същата Изразис една от изброените стойности. Изброените стойности са разделени със запетаи.
Случай 10 Това проверява дали стойността е същата Изразис дадена стойност.
Случай от 11 до 20 По този начин можете да напишете израз, за ​​да проверите дали стойността удовлетворява Изразисъстояние като от 11 до 20 часа(еквивалентно на неравенството „11<=значение<=20”).
Друг случай Така, като използвате ключовата дума иначе, действията са посочени в случай, че стойността Изразине съответства на нито една от изброените опции Случай.

Веднага след като се намери едно от условията, се извършват съответните действия и се излиза от структурата. Изберете Case... Тоест във всеки случай ще бъде изпълнен само един от изброените клонове Случай.

Добре, няма начин да правиш това, което искаш. Не можете да използвате нищо друго освен синтаксис на Excel във формула, така че неща като "A1 = 1 до 9" просто не са възможни.

Можете да напишете доста сложна VBA рутина, която взема низове или каквото и да е и ги анализира, но това наистина се свежда до проектиране и внедряване на пълен малък език. И вашият "код" няма да работи добре с Excel. Например, ако сте нарекли нещо подобно

Случаи ("(A1 =" "" "," "няма нищо" "), (друго, A1)")

(обърнете внимание на екраниращите кавички) Excel няма да актуализира вашата препратка A1, когато я преместите или копирате формула. Следователно, изхвърлете целия параметър "синтаксис".

Оказва се обаче, че можете да получите повечето от поведението, което мисля, че наистина искате с обикновени формули на Excel плюс един малък VBA UDF. Първо СДС:

Публична функция arr (ParamArray args ()) arr = args Крайна функция

Това ни позволява да създадем масив от набор от аргументи. Тъй като аргументите могат да бъдат изрази, а не просто константи, можем да го извикаме от формулата по следния начин:

Arr (A1 = 42, A1 = 99)

и връща масив от булеви стойности.

С това малко UDF вече можете да използвате обикновени формули за „избиране на случаи“. Те биха изглеждали така:

ИЗБЕРЕТЕ (СЪВПАДАНЕ (ВЯРНО, доп. (A1> 5, A1<5, A1=5), 0), "gt 5", "lt 5", "eq 5")

Това, което се случва, е, че "arr" връща булев масив, "MATCH" намира позицията на първия TRUE, а "CHOOSE" връща съответния "случай".

Можете да емулирате клаузата "else", като обвиете цялото нещо в "IFERROR":

АКО ГРЕШКА (ИЗБЕРЕТЕ (СЪВПАДАНЕ (ВЯРНО, обр. (A1> 5, A1<5), 0), "gt 5", "lt 5"), "eq 5")

Ако това е твърде много за вас, винаги можете да напишете друг VBA UDF, който ще доведе до МАЧ, ИЗБИРАНЕ и т.н. вътре и ще го нарече така:

Случаи (обр (A1> 5, A1<5, A1=5), "gt 5", "lt 5", "eq 5")

Това е близо до предложения от вас синтаксис и много, много по-просто.

Виждам, че вече сте измислили (добро) решение, което е по-близо до това, което наистина искате, но реших да добавя това все пак, тъй като изразът ми по-горе е за кастинг MATCH, CHOOSE и т.н. вътре в UDF го направи да изглежда по-просто, отколкото е в действителност.

И така, ето случаите "UDF":

Случаи на публична функция (caseCondResults, ParamArray caseValues ​​()) При грешка GoTo EH Dim resOfMatch resOfMatch = Application.Match (True, caseCondResults, 0) Ако IsError (resOfMatch) Тогава case = resOfMatch Else Call assign (cases, caseValu LBound) (caseValues ​​+ resOfMatch - 1)) End If Exit Function EH: case = CVERr (xlValue) Крайна функция

Той използва малка помощна рутина, "присвояване":

Публичен подзадаване (ByRef lhs, rhs) Ако IsObject (rhs) След това задайте lhs = rhs Иначе lhs = rhs Край, ако Край на под

Процедурата за присвояване просто улеснява справянето с факта, че потребителите могат да извикват UDF с всяка препратка към стойност или диапазон. Тъй като искаме UDF на нашите „случаи“ да работи като Excel „CHOOSE“, бихме искали да върнем препратките, ако е необходимо.

По принцип в новите „случаи“ на UDF ние сами правим „избора“, като индексираме стойностите на случаите в масива от параметри. Премахнах манипулатора на грешки там, така че основни неща, като несъответствие между резултатите от условието на случай и стойностите на случаите, ще доведат до връщана стойност #VALUE!. Вероятно бихте добавили повече проверки към действителната функция, например, за да сте сигурни, че резултатите от условието са булеви и т.н.

Радвам се, че постигнахте още по-добро решение за себе си! Това беше интересно.

ПОВЕЧЕ ЗА "присвояване":

В отговор на вашия коментар, ето повече за това защо това е част от моя отговор. VBA използва различен синтаксис за присвояване на обект към променлива, отколкото за присвояване на проста стойност. Разгледайте помощта на VBA или погледнете този въпрос на stackoverflow и други ще харесат: Какво всъщност прави ключовата дума Set във VBA?

Това има значение, защото когато извикате VBA функция от формула на Excel, параметрите могат да бъдат обекти Range, в допълнение към числа, низове, булеви стойности, грешки и масиви. (Вижте Може ли на Excel VBA UDF, извикан от работен лист, някога да бъде предадено копие на всеки клас на обектния модел на Excel VBA, различен от „Обхват“?)

Препратките за диапазон са това, което описвате с помощта на синтаксиса на Excel, като A1: Q42. Когато предадете такъв към UDF на Excel като параметър, той се появява като обект Range. Ако искате да върнете обект Range от UDF, трябва да го направите изрично с помощта на ключовата дума VBA "Set". Ако не използвате Set, Excel вместо това ще вземе стойността в диапазона и ще я върне. През повечето време това няма значение, но понякога искате действителния диапазон, например когато имате наименувана формула, която трябва да се оцени до диапазон, защото се използва като източник за контролния списък.

Топ свързани статии