Разное

Case vba пример: Пример работы с оператором Select..Case в VBA

Содержание

Пример работы с оператором Select..Case в VBA

   В прошлой статье я рассказал о работе с условным оператором IF в VBA. Но что делать, если условий в задаче возникает очень много? Использовать конструкцию If многократно неудобно, и это усложняет читабельность кода.  Для таких целей в VBA предусмотрена еще одна очень полезная конструкция — управляющий оператор Select…Case.

Select…Case позволяет по определенному значению, диапазону или условию выполнить разные действия. Например:
если а = 5 то выполнить действие 1
если a в диапазоне между 7 и 9 то действие 2
если a не подходит ни одно условие то действие 3

Это можно записать условным оператором If, получается следующее:

If a = 5 Then
    действие 1
 elseif (a > 7 And a < 9) Or (a = 7 Or a = 9) then
    действие 2
Else действие 3
End If

Сложновато, не правда ли!? А теперь представьте, если условий будет гораздо больше.
Теперь запишем это же, но с помощью конструкции Select:

Select Case a
      Case 5
             действие 1
      Case 7 To 9
             действие 2
      Case Else
             действие 3
End Select

Код получился немного длиннее, но намного понятнее и читаемый. Теперь рассмотрим конструкцию:

  • Select Case а — ключевые слова конструкции, после которых идет переменная «а» которую необходимо проверить. Тип переменной может быть, целым, вещественным, строковым, символьным, логическим;
  • Case — ключевое слово, после которого указываются варианты условия;
  • Case 7 To 9 — проверяет, входит ли «а» в диапазон от 7 до 9;
  • Case Else — если «а» не подходит ни под одно условие, то выполняется ИНАЧЕ. Эту строку можно и не использовать;
  • End Select — ключевые слова означающие завершение конструкции Select.

Пример работы Select Case:

Sub Test()
  a = 5
    Select Case a
         Case 5: MsgBox «a=5»
         Case 7 To 9: MsgBox «a между 7 и 9»
             Case Else: MsgBox «a не подходит»
    End Select
End Sub

И еще один пример демонстрирующий задание условия в Case:

Sub Test()
  a = 3
   Select Case a
      Case Is > 5
            MsgBox «a больше 5»
      Case Is > 7
            MsgBox «a больше 7»
      Case Else
            MsgBox «Не подходит ни одно условие»
   End Select
End Sub

Обратите внимание, при указании условия «>», после Case добавляется ключевое слово Is.

Оператор Select…Case — Visual Basic



  • Чтение занимает 3 мин

В этой статье

Выполняет одну из нескольких групп инструкций в зависимости от значения выражения.Runs one of several groups of statements, depending on the value of an expression.

СинтаксисSyntax

Select [ Case ] testexpression  
    [ Case expressionlist  
        [ statements ] ]  
    [ Case Else  
        [ elsestatements ] ]  
End Select  

КомпонентыParts

ТерминTermОпределениеDefinition
testexpressionОбязательный.Required. Выражение.Expression. Необходимо вычислить до одного из простейших типов данных (,,,,,,,,,,,,,, Boolean Byte Char Date Double Decimal Integer Long Object SByte Short Single String UInteger ULong и UShort ).Must evaluate to one of the elementary data types (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong, and UShort).
expressionlistТребуется в Case операторе.Required in a Case statement. Список предложений выражений, представляющих значения соответствия для testexpression .List of expression clauses representing match values for testexpression. Несколько предложений выражений разделяются запятыми.Multiple expression clauses are separated by commas. Каждое предложение может принимать одну из следующих форм:Each clause can take one of the following forms:

expression1 To выражение2expression1 To expression2
-[ Is ] компарисоноператор выражение— [ Is ] comparisonoperator expression
выражениеexpression

Используйте To ключевое слово, чтобы указать границы диапазона значений соответствия для testexpression .Use the To keyword to specify the boundaries of a range of match values for testexpression. Значение expression1 должно быть меньше или равно значению expression2 .The value of expression1 must be less than or equal to the value of expression2.

Используйте Is ключевое слово с оператором сравнения ( = , <> ,,, < <= > или >= ), чтобы указать ограничение на значения сопоставления для testexpression .Use the Is keyword with a comparison operator (=, <>, <, <=, >, or >=) to specify a restriction on the match values for testexpression. Если Is ключевое слово не указано, оно автоматически вставляется перед компарисоноператор.If the Is keyword is not supplied, it is automatically inserted before comparisonoperator.

Форма, указывающая только expression , рассматривается как особый случай формы, Is где компарисоноператор — знак равенства ( = ).The form specifying only expression is treated as a special case of the Is form where comparisonoperator is the equal sign (=). Эта форма вычисляется как testexpression = expression .This form is evaluated as testexpression = expression.

Выражения в expressionlist могут быть любого типа данных при условии, что они неявно преобразуются в тип, testexpression а подходящее значение comparisonoperator допустимо для двух типов, с которыми он используется.The expressions in expressionlist can be of any data type, provided they are implicitly convertible to the type of testexpression and the appropriate comparisonoperator is valid for the two types it is being used with.

statementsНеобязательный элемент.Optional. Одна или несколько следующих инструкций Case , которые выполняются, если testexpression совпадают с любым предложением в expressionlist .One or more statements following Case that run if testexpression matches any clause in expressionlist.
elsestatementsНеобязательный элемент.Optional. Одна или несколько следующих инструкций Case Else , которые выполняются, если не testexpression соответствуют ни одному из предложений в expressionlist ни одной из Case инструкций.One or more statements following Case Else that run if testexpression does not match any clause in the expressionlist of any of the Case statements.
End SelectЗавершает определение Select конструкции…. CaseTerminates the definition of the SelectCase construction.

RemarksRemarks

Если testexpression соответствует любому Case expressionlist предложению, инструкции, следующие за этим Case оператором, выполняются до следующей Case Case Else инструкции, или End Select .If testexpression matches any Case expressionlist clause, the statements following that Case statement run up to the next Case, Case Else, or End Select statement. Затем управление передается следующему оператору End Select .Control then passes to the statement following End Select. Если testexpression соответствует expressionlist предложению в более чем одном Case предложении, выполняются только инструкции, следующие за первым совпадением.If testexpression matches an expressionlist clause in more than one Case clause, only the statements following the first match run.

Case ElseОператор используется для представления elsestatements для запуска, если между testexpression expressionlist предложением и в других инструкциях не найдено совпадений Case .The Case Else statement is used to introduce the elsestatements to run if no match is found between the testexpression and an expressionlist clause in any of the other Case statements. Хотя это и не является обязательным, рекомендуется иметь Case Else в конструкции оператор, Select Case обрабатывающий непредвиденные testexpression значения.Although not required, it is a good idea to have a Case Else statement in your Select Case construction to handle unforeseen testexpression values. Если Case expressionlist предложение не совпадает testexpression и отсутствует Case Else оператор, управление передается оператору ниже End Select .If no Case expressionlist clause matches testexpression and there is no Case Else statement, control passes to the statement following End Select.

В каждом предложении можно использовать несколько выражений или диапазонов Case .You can use multiple expressions or ranges in each Case clause. Например, следующая строка допустима.For example, the following line is valid.

Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

Примечание

IsКлючевое слово, используемое в Case Case Else операторах и, не совпадает с оператором is, который используется для сравнения ссылок на объекты.The Is keyword used in the Case and Case Else statements is not the same as the Is Operator, which is used for object reference comparison.

Можно указать диапазоны и несколько выражений для символьных строк.You can specify ranges and multiple expressions for character strings. В следующем примере Case соответствует любой строке, которая равна «яблоки», имеет значение между «гайкями» и «полный курс» в алфавитном порядке или содержит точно то же значение, что и текущее значение testItem .In the following example, Case matches any string that is exactly equal to «apples», has a value between «nuts» and «soup» in alphabetical order, or contains the exact same value as the current value of testItem.

Case "apples", "nuts" To "soup", testItem

Параметр Option Compare может влиять на сравнения строк.The setting of Option Compare can affect string comparisons. В Option Compare Text строках «яблоки» и «яблоки» сравниваются как одинаковые, но в противном случае — Option Compare Binary нет.Under Option Compare Text, the strings «Apples» and «apples» compare as equal, but under Option Compare Binary, they do not.

Примечание

CaseОператор с несколькими предложениями может демонстрировать поведение, называемое сокращенным вычислением.A Case statement with multiple clauses can exhibit behavior known as short-circuiting. Visual Basic вычисляет предложения слева направо, и если одно из них создает совпадение с testexpression , оставшиеся предложения не оцениваются.Visual Basic evaluates the clauses from left to right, and if one produces a match with testexpression, the remaining clauses are not evaluated. Сокращенное вычисление может повысить производительность, но может привести к непредвиденным результатам, если ожидается вычисление каждого выражения в expressionlist .Short-circuiting can improve performance, but it can produce unexpected results if you are expecting every expression in expressionlist to be evaluated. Дополнительные сведения об сокращенном вычислении см. в разделе логические выражения.For more information on short-circuiting, see Boolean Expressions.

Если код в Case Case Else блоке инструкций или не требует выполнения каких-либо инструкций в блоке, он может выйти из блока с помощью Exit Select инструкции.If the code within a Case or Case Else statement block does not need to run any more of the statements in the block, it can exit the block by using the Exit Select statement. Это немедленно передает управление оператору, приведенному ниже End Select .This transfers control immediately to the statement following End Select.

Select Case конструкции могут быть вложенными.Select Case constructions can be nested. Каждая вложенная Select Case конструкция должна иметь соответствующий End Select оператор и должна быть полностью заключена в один Case Case Else блок инструкций или внешней конструкции, Select Case внутри которой он вложен.Each nested Select Case construction must have a matching End Select statement and must be completely contained within a single Case or Case Else statement block of the outer Select Case construction within which it is nested.

ПримерExample

В следующем примере конструкция используется Select Case для записи строки, соответствующей значению переменной number .The following example uses a Select Case construction to write a line corresponding to the value of the variable number. Вторая Case инструкция содержит значение, совпадающее с текущим значением number , поэтому инструкция, записывающая «между 6 и 8 включительно», выполняется.The second Case statement contains the value that matches the current value of number, so the statement that writes «Between 6 and 8, inclusive» runs.

Dim number As Integer = 8
Select Case number
    Case 1 To 5
        Debug.WriteLine("Between 1 and 5, inclusive")
        ' The following is the only Case clause that evaluates to True.
    Case 6, 7, 8
        Debug.WriteLine("Between 6 and 8, inclusive")
    Case 9 To 10
        Debug.WriteLine("Equal to 9 or 10")
    Case Else
        Debug.WriteLine("Not between 1 and 10, inclusive")
End Select

См. такжеSee also

VBA Excel. Оператор Select Case (синтаксис, примеры)

Оператор Select Case, выполняющий одну или более групп операторов VBA Excel в зависимости от значения управляющего выражения. Синтаксис, компоненты, примеры.

Описание оператора Select Case

Оператор Select Case используется в VBA Excel для управления отдельными блоками операторов в зависимости от значения управляющего выражения (переменной) и сравнительных условий, задаваемых ключевым словом Case.

Синтаксис оператора Select Case

Select Case <strong>выражение</strong>

Case <strong>условие 1</strong>

[<strong>операторы 1</strong>]

Case <strong>условие 2</strong>

[<strong>операторы 2</strong>]

——————

Case <strong>условие n</strong>

[<strong>операторы n</strong>]

Case Else

[<strong>операторы</strong>]

End Select

Компоненты оператора Select Case

  • выражение – любое числовое или строковое выражение, переменная;
  • условие – диапазон значений или выражение с операторами сравнения и ключевым словом Is*;
  • операторы – блок операторов VBA Excel, который выполняется при вхождении значения управляющего выражения в диапазон, заданный в условии, или при возврате выражением с операторами сравнения значения True;
  • блок операторов после ключевой фразы Case Else** выполняется в том случае, если в предыдущих условиях Case не будет найдено совпадений со значением управляющего выражения (переменной).

* Редактор VBA Excel автоматически добавляет ключевое слово Is в условия с операторами сравнения.
** Компонент Case Else с соответствующим блоком операторов необязательны, но рекомендуется их использовать для обработки непредвиденных значений управляющего выражения (переменной).

Примеры использования в VBA Excel

Пример 1

Пример использования оператора Select Case с операторами сравнения в условиях:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Sub primer1()

Dim a As Integer, b As String

a = InputBox(«Введите число от 1 до 5», «Пример 1», 1)

  Select Case a

    Case Is = 1

      b = «один»

    Case Is = 2

      b = «два»

    Case Is = 3

      b = «три»

    Case Is = 4

      b = «четыре»

    Case Is = 5

      b = «пять»

    Case Else

      b = «Число не входит в диапазон от 1 до 5»

  End Select

MsgBox b

End Sub

Этот пример аналогичен первому примеру из статьи VBA Excel. Функция Choose, с помощью которой и следует решать подобные задачи в VBA Excel.

Пример 2

Пример использования оператора Select Case с заданным диапазоном в условиях:

Sub primer2()

Dim a As Integer, b As String

a = InputBox(«Введите число от 1 до 30», «Пример 2», 1)

Select Case a

Case 1 To 10

b = «Число » & a & » входит в первую десятку»

Case 11 To 20

b = «Число » & a & » входит во вторую десятку»

Case 21 To 30

b = «Число » & a & » входит в третью десятку»

Case Else

b = «число » & a & » не входит в первые три десятки»

End Select

MsgBox b

End Sub

Для решения подобной задачи в VBA Excel можно использовать многострочную конструкцию оператора If…Then…Else, но решение с Select Case выглядит изящней.

Оператор Select Case (VBA) | Microsoft Docs



  • Чтение занимает 2 мин

В этой статье

Выполняет несколько групп операторов в зависимости от значения выражения.Executes one of several groups of statements, depending on the value of an expression.

СинтаксисSyntax

Выбор варианта тестекспрессионSelect Case testexpression
[ Case експрессионлист – n [ Операторы – n ]][ Case expressionlist-n [ statements-n ]]
[ Case Else [ elseifstatements ]][ Case Else [ elsestatements ]]
End SelectEnd Select

Синтаксис оператора Select Case состоит из следующих частей:The Select Case statement syntax has these parts:

ЧастьPartОписаниеDescription
тестекспрессионtestexpressionОбязательный.Required. Любое числовое выражение или строковое выражение.Any numeric expression or string expression.
експрессионлист – nexpressionlist-nОбязательный параметр, если используется оператор Case.Required if a Case appears.

Список с разделителями из одной или нескольких следующих форм: Expression, ExpressiontoExpression, является выражением__компарисоноператор .Delimited list of one or more of the following forms: expression, expressionToexpression, Iscomparisonoperator expression.

Ключевое слово to определяет диапазон значений.The To keyword specifies a range of values. Если вы используете ключевое слово To, то наименьшее значение должно быть указано до To.If you use the To keyword, the smaller value must appear before To.

Используйте ключевое слово Is с операторами сравнения (кроме Is и Like) для указания диапазона значений.Use the Is keyword with comparison operators (except Is and Like) to specify a range of values. Если этот параметр не указан, автоматически вставляется ключевое слово Is.If not supplied, the Is keyword is automatically inserted.

операторы: nstatements-nНеобязательно.Optional. Один или несколько операторов, выполняемых, если тестекспрессион соответствует любой части експрессионлист – n.One or more statements executed if testexpression matches any part of expressionlist-n.
elsestatementselsestatementsНеобязательный параметр.Optional. Один или несколько операторов, которые выполняются, если testexpression не соответствует какому-либо из выражений Case.One or more statements executed if testexpression doesn’t match any of the Case clause.

ПримечанияRemarks

Если тестекспрессион соответствует любому выражению експрессионлист case , Операторы , следующие за предложением case , выполняются до следующего предложения case , или, для последнего предложения, до конца SELECT.If testexpression matches any Case expressionlist expression, the statements following that Case clause are executed up to the next Case clause, or, for the last clause, up to End Select. Затем контроль передается оператору после End Select.Control then passes to the statement following End Select. Если testexpression совпадает с выражением expressionlist в нескольких предложениях Case, выполняются только операторы после первого совпадения.If testexpression matches an expressionlist expression in more than one Case clause, only the statements following the first match are executed.

Предложение Case Else используется для указания того, что выражения elsestatements выполняются, если не обнаружено совпадение между testexpression и expressionlist в других предложениях Case.The Case Else clause is used to indicate the elsestatements to be executed if no match is found between the testexpression and an expressionlist in any of the other Case selections. Хотя это необязательно, рекомендуется использовать оператор Case Else в блоке Select Case для обработки непредвиденных значений testexpression.Although not required, it is a good idea to have a Case Else statement in your Select Case block to handle unforeseen testexpression values. Если ни один из вариантов експрессионлист не соответствует Тестекспрессион , а оператор Case Else отсутствует, выполнение продолжается с оператора, следующего за End Select.If no Case expressionlist matches testexpression and there is no Case Else statement, execution continues at the statement following End Select.

В предложении Case можно использовать несколько выражений или диапазонов.You can use multiple expressions or ranges in each Case clause. Например, допустима следующая строка.For example, the following line is valid:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber 

Примечание

Оператор сравнения Is — не то же самое, что ключевое слово Is, используемое в операторе Select Case.The Is comparison operator is not the same as the Is keyword used in the Select Case statement.

Вы также можете указать диапазоны и несколько выражений для строк символов.You also can specify ranges and multiple expressions for character strings. В следующем примере регистр совпадение соответствует строкам, everythingравным строкам, которые находятся в nuts разных soup и в алфавитном порядке, а текущее значение TestItem:In the following example, Case matches strings that are exactly equal to everything, strings that fall between nuts and soup in alphabetic order, and the current value of TestItem:

Case "everything", "nuts" To "soup", TestItem 

Операторы Select Case могут быть вложенными.Select Case statements can be nested. Каждый вложенный оператор Select Case должен иметь сопоставленный оператор End Select .Each nested Select Case statement must have a matching End Select statement.

ПримерExample

В этом примере оператор Select Case используется для оценки значения переменной.This example uses the Select Case statement to evaluate the value of a variable. Второе предложение Case содержит значение оцениваемой переменной, поэтому выполняется только связанный с ним оператор.The second Case clause contains the value of the variable being evaluated, and therefore only the statement associated with it is executed.

Dim Number 
Number = 8    ' Initialize variable. 
Select Case Number    ' Evaluate Number. 
Case 1 To 5    ' Number between 1 and 5, inclusive. 
    Debug.Print "Between 1 and 5" 
' The following is the only Case clause that evaluates to True. 
Case 6, 7, 8    ' Number between 6 and 8. 
    Debug.Print "Between 6 and 8" 
Case 9 To 10    ' Number is 9 or 10. 
Debug.Print "Greater than 8" 
Case Else    ' Other values. 
    Debug.Print "Not between 1 and 10" 
End Select

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



Оператор ветвления «Select Case» — Операторы ветвления — Программирование на VBA — Статьи об Excel

 

При создании сложных программ один из ключевых моментов — возможность предусмотреть несколько вариантов развития событий. Самый простой и классический пример — оператор «If … Then … Else … End«, который позволяет выбрать одно из двух действий в зависимости от результатов проверки каких-либо значений. Бывает, что в результате такой проверки необходимо выбрать из множества вариантов. Один из выходов: добавить множество «… ElseIf …», что несколько усложняет синтаксис программы (лёгкость её чтения). Однако это очень мощный оператор, открывающий большие возможности. Подробнее о нём можно узнать здесь.

 

Альтернативой оператору «If … End» служит оператор «Select Case» (с английского «Select Case» можно перевести как «Выбор Ситуации»), который упрощает восприятие кода «на глаз». И если «If … End» оператор в каждом своём «ElseIf» вынужден обращаться к проверяемым значениям снова и снова (допустим, выражение каждый раз одинаковое), то «Select Case» делает это только один раз, что позволяет последнему на больших массивах данных работать быстрее. Этот оператор позволяет удобно задать ветвление программы из одной точки в большое количество веток. То есть в основном применяется при множественных условиях проверки, когда проверяемых условий больше двух.

 

Структура оператора «Select Case».

 

Давайте посмотрим, как выглядит обобщённая структура оператора и разберём, что есть что (разные примеры частного использования кода будут приведены в конце статьи):

Select Case [Проверяемое Значение]
    Case [Конкретное Значение]
        [Некоторое Действие]
    Case Else
        [Некоторое Действие Х]
End Select

В качестве куска [Значение] можно вставить любую переменную или свойство, значение которой или которого Вы можете проверить. Можно также проверять значение конкретной ячейки. При этом работать можно не только с числами, но и с текстами. И даже с булевыми значениями TRUE/FALSE («Правда» и «Ложь»), о чем знают не все.

 

[Конкретное Значение] — это то, с чем сравнивается [Проверяемое Значение]. И, если одно удовлетворяет другому, то выполняется [Некоторое Действие]. Есть несколько вариантов записи для блока [Конкретное Значение]. Для текстовых и числовых значений можно записывать разные значения через запятую:

Case 3, 4, 5, "да", "нет"

Для чисел можно выбирать диапазоны:

Case 3 to 10 'От 3-х до 10-ти, включая сами 3 и 10.

Также для чисел можно использовать логический оператор сравнения вместе с частицей «Is«:

Case Is < 2 'Меньше 2, НЕ включая 2
Case Is = 3 'Равно 3-м. Избыточная запись, достаточно Case 3
Case Is >= 4 'Больше либо равно 4
Case Is <> 0 'Не равно нулю

Допустимо использовать и логические операторы, что позволит предусматривать сложнейшие случаи и проводить параллельные сравнения с другими переменными. Кроме оператора «Or», который заменяется обычной запятой.

Case ... And ...
Case Not ...

[Некоторое Действие] может быть абсолютно любым. Если вы его пропускаете — то для данного случая программа будет бездействовать. «Case [Конкретное Значение]» вместе с частью [Некоторое Действие] складываются в один блок:

Case [Конкретное Значение]
    [Некоторое Действие]

Таких блоков может быть любое количество, которое уложится в предельные размеры процедуры (она должна весить не более 64 килобайт). Полезно знать, что VBA просматривает соответствие [Конкретного Значения] и [Проверяемого Значения] вдоль по блокам сверху вниз. То есть, у Вас может быть два блока с одинаковым «Case«, но выполнится только тот, который будет раньше найден программой при просмотре кода сверху вниз.

 

Case Else — это все другие случаи, которые не подошли ни под одно другое [Конкретное Значение] во всех блоках оператора «Select Case«. Если блок «Case Else» отсутствует и ни один другой блок не подошёл, то программа делает логичное «ничего». Case Else должен быть последним проверяемым случаем среди всех блоков проверки в операторе. После него других блоков быть не должно, иначе получим синтаксическую ошибку «Case without Select Case«.

 

В конце оператора должен стоять «End Select«, который служит «точкой» в «предложении» оператора.

 

Примеры использования.

 

Рассмотрим несколько примеров использования кода и начнём с самого простого. В первом примере в зависимости от значения Х выводится сообщение.

Sub SelectCase_example_1()

Dim X As Long
X = 1 'Можете изменять эту цифру и смотреть, что получится.

Select Case X
    Case 1
        MsgBox "Один"
    Case 2
        MsgBox "Два"
    Case 3
        MsgBox "Три"
    Case Else
        MsgBox "Выбрано что-то другое"
End Select

End Sub

Второй пример показывает некоторые виды записи проверяемого значения. В зависимости от количества листов в книге с макросом выводится разное сообщение. Обратите внимание, что если листов в книге 7, то первым сработает “Case 7”, хотя условие “Case 5 to 12” тоже подходит, но стоит позже.

Sub SelectCase_example_2()

'Введём переменную и посчитаем количество листов в текущей книге:
Dim X As Long
X = ThisWorkbook.Sheets.Count

Select Case X 'В зависимости от количества листов в книге выведем сообщение.
    Case 1 'Если 1 лист, то...
        MsgBox "Один лист в книге"
    Case 2, 3, 4 'Если листов 2 или 3 или 4
        MsgBox "Несколько листов в книге"
    Case 7 'Если листов 7
        MsgBox "Красивое количество листов"
    Case 5 To 12 'Если листов от 5 до 12
        MsgBox "Почти брошюра"
    Case Is >= 14 'Если листов больше либо равно 14
        MsgBox "Листов как в фолианте"
    Case Else 'Все остальные случаи, а именно 13
        MsgBox "Чёртова дюжина листов"
End Select

End Sub

Третий пример ориентируется на булево значение TRUE или FALSE. Проверяется, виден или скрыт последний лист в текущей книге с макросом. С помощью двоеточия может заменяться перенос строки для получения более изящного кода.

Sub SelectCase_example_3()

'Введём переменную и привяжем её к последнему листу в книге:
Dim shtX As Worksheet: Set shtX = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

Select Case shtX.Visible 'Проверим, скрыт ли лист или нет
    Case True: MsgBox "Последний лист в книге доступен" 'Если последний лист виден
    Case False: MsgBox "Последний лист в книге скрыт" 'Если последний лист скрыт
End Select

End Sub

Четвёртый пример показывает, что «Case» может ориентироваться и на другие переменные. В данном случае будем проверять равенство трёх переменных с помощью логического оператора «And»:

Sub SelectCase_example_4()

'Введём несколько переменных:
Dim X%, Y%, Z%
'Приравняем всех к тройке:
X = 3: Y = 3: Z = 3

Select Case True 'Проверим равенство всех переменных
    Case Z = X And Y = X: MsgBox "Все равны" 'Если все равны
    Case Else: MsgBox "Кто-то отличается" 'Если хоть кто-то отличается
End Select

End Sub

Пятый пример показывает, как через запятую в проверяемом значении для «Case» можно указать целый набор чисел. Допустим, есть некоторая функция и мы проверяем, может ли наше число в этой функции использоваться. По условию, нас устраивают числа в диапазоне от 5 (не включая 5) до минус бесконечности, от 12 до 15 включая концы и от 20 (включая 20) до плюс бесконечности.

Sub SelectCase_example_5()

'Введём переменную и дадим ей значение вручную
Dim X As Double
X = InputBox("Введите числовое значение переменной Х")

Select Case X 'Проверим, подходит ли некоторой воображаемой функции наше значение
    Case Is < 5, Is >= 20, 12 To 15 'Диапазон подходящих значений
        MsgBox "Действительное значение для некоторой функции"
    Case Else 'Не подходящие значения
        MsgBox "Значение не может быть использовано в некоторой функции"
End Select

End Sub

Подводя черту, замечу, что оператор «Select Case» по структуре довольно прост и удобен в использовании. Он менее гибок по сравнению с «If … End», если по ходу проверок требуется менять проверяемое значение, но значительно выигрывает при разнообразных проверках одного и того же выражения. Для чего собственно и был создан.

 

Спасибо за внимание.

 

Статью c примерами составил Роман «Rioran» Воронов для www.excelworld.ru

 

Использование операторов Select Case (VBA)



  • Чтение занимает 2 мин

В этой статье

Используйте оператор Select Case в качестве альтернативы для использования ElseIf в операторе If… Then… Else при сравнении одного выражения с несколькими разными значениями.Use the Select Case statement as an alternative to using ElseIf in If…Then…Else statements when comparing one expression to several different values. Хотя операторы If…Then…Else могут вычислять отдельное выражение для каждого оператора ElseIf, оператор Select Case вычисляет выражение всего один раз — в верхней точке управляющей структуры.While If…Then…Else statements can evaluate a different expression for each ElseIf statement, the Select Case statement evaluates an expression only once, at the top of the control structure.

В следующем примере оператор Select Case оценивает аргумент, который передается в процедуру.In the following example, the Select Case statement evaluates the argument that is passed to the procedure. Обратите внимание, что каждый оператор Case может содержать несколько значений, диапазон значений или комбинацию значений и операторов сравнения.Note that each Case statement can contain more than one value, a range of values, or a combination of values and comparison operators. Необязательный оператор Case Else выполняется, если оператор Select Case не соответствует значению в любом из операторов Case.The optional Case Else statement runs if the Select Case statement doesn’t match a value in any of the Case statements.

Function Bonus(performance, salary) 
  Select Case performance 
    Case 1 
      Bonus = salary * 0.1 
    Case 2, 3 
      Bonus = salary * 0.09 
    Case 4 To 6 
      Bonus = salary * 0.07 
    Case Is > 8 
      Bonus = 100 
    Case Else 
      Bonus = 0 
  End Select 
End Function 

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



Урок 13 по VBA — Оператор Select Case






Оператор Select Case VBA языка предназначен для формирования выбора операции в зависимости от значения, по сути, данный оператор выбора является гибридом условного оператора vba if then. Все довольно просто – в сценарии есть переменная, значение которой будет изменяться, и в зависимости от значения нужно выбрать, какой блок кода (выражение) выполнить.

Как и в условном операторе VBA if then, тут происходит проверка значения, например: есть текстовое поле, в которое нужно ввести данные, допустим, возраст. Далее следует проверить введенное значение, если значение меньше 18 – вывести один текст, если значение находится между 19 и 30 – другой текст, в противном случае – вывести третий текст. Как уже говорилось, для таких целей можно использовать условный оператор, однако, оператор выбора VBA Select Case является более компактным варинтом.

Синтаксис оператора VBA Select Case:

Select Case значение
Select условие 1
Набор операторов
 
Select условие 2
Набор операторов
 
Select условие 3
Набор операторов
 
….
 
Select условие N
Набор операторов N
 
Case Else
Другие операторы






 
End Select

Вначале происходит проверка параметра “значение”, который может быть как строкового, так и числового типа, после проверки параметра, происходит поочередное сравнение (начиная сначала) с каждый условием, которые прописаны в операторах Select Case VBA. Если совпадение произойдет для “условие 1”, то будет выполнен “набор операторов 1”, после чего произойдет выполнения кода, находящегося после End Select. Оператор Case Else формально означает “В противном случае”, то есть, если ни одно из условий не подходит, то выполнится набор операторов, прописанных для Case Else. Само выражение VBA — Case Else не является обязательным, как и “другие операторы”, при необходимости его можно опустить, оно всегда прописывается в конце.

Давайте рассмотрим такой пример кода:

Private Sub CommandButton1_Click()
    Dim a
    a = TextBox1.Text
    Select Case a
        Case Is < 100
            Label1.Caption = "Введенное значение меньше числа 100"
        Case 101 To 150
            Label1.Caption = "Введенное значение больше числа 100 и меньше 151"
        Case 151 To 200
            Label1.Caption = "Введенное значение больше 151 и меньше 201"
        Case Else
            Label1.Caption = "Другое значение, оператор Select Case VBA"
    End Select
End Sub
 
Private Sub UserForm_Activate()
    '*****************************
    '  начальные настройки
    '*****************************

    Label1.Caption = ""
    ' размер текста
    Label1.FontSize = 15
    ' цвет текста
    Label1.ForeColor = &HFF0000
    ' выравнивание по центру
    Label1.TextAlign = fmTextAlignCenter
    ' включить перенос строк
    Label1.WordWrap = True
    ' надпись на кнопке
    CommandButton1.Caption = "Показать"
    'начальное сожержимое текстового поля
    TextBox1.Text = "Введите любое значение"
End Sub

В данном примере у нас есть процедура CommandButton1_Click, которая отвечает за обработку нажатия по кнопке. Переменная a будет хранить значение текстового поля TextBox1 (свойство Text). Далее следует оператор выбора Select case VBA языка, в котором происходит проверка значения переменной a, после чего, значение сравнивается с условиями:

  • Case Is < 100 – если значение переменной a меньше числа 100
  • Case 101 To 150 – если значение находится в диапазоне от 101 до 150
  • Case 151 To 200 – диапазон проверки от 151 до 200
  • Case Else – собственно, всю другие значения.

В зависимости от результат проверки, в свойство Caption, объекта Label, будет записанное информативное сообщение.

Процедура UserForm_Activate содержит строки кода для начальной настройки компонентов формы – цвет, размер, начальный текст и так далее.

Результат выполнения макроса вы можете увидеть на рисунке. Для создания связи между макросом и формой, в блоке кода для модуля нужно прописать:

Sub OBModule()
    OBForm.Show
End Sub

Тут OBModule – имя модуля (макроса), а OBForm – название формы.

Стоит обратить внимание, что даже при совпадении условие, например: меньше 100 и больше 99, в операторе выбора VBA Select Сase произойдет выполнения лишь для первого подходящего условия, а все остальные будут проигнорированы.








Корпус VBA | Как использовать формулировку регистра Excel VBA? (Примеры)

Excel, корпус VBA

В Excel нет прямого указания для вызова предложения или утверждения по любому слову или номеру. Это можно сделать с помощью функций вставки, но для этого потребуется слишком много аргументов. VBA Case используется для вызова одной или любой группы операторов, которая зависит от значения выражения. Если выражение или регистр имеет определенные значения или предложение, тогда, если мы введем номер случая, мы получим значения или предложение, определенные для этого числа или алфавита.

Ниже в основном требуется следующий синтаксис;

  • Выбрать регистр — Выбрать регистр — это используемое текстовое выражение, которое может быть числовым или строковым.
  • Case — Case имеет expressionist-n и statement-n , что означает, что экспрессионист требует, если есть какой-либо case, а оператор-n является необязательным, если тестовые выражения совпадают с любым из expressionist-n.
  • Else Statement — Если тестовое выражение не соответствует ни одному из выражений Case, то появляется оператор Else.

Как использовать оператор Excel VBA Case?

Мы узнаем, как использовать оператор Excel VBA Case на нескольких примерах.

Заявление о регистре VBA в Excel — Пример № 1

Мы создаем VBA Case для текстовой инструкции с числами для разных дней недели. Выполните следующие шаги, чтобы использовать оператор Case в VBA.

Шаг 1: Перейдите в окно VBA и откройте новый модуль, выбрав Модуль на вкладке меню Вставить , как показано ниже.

Шаг 2: Как только мы это сделаем, мы откроем новый модуль. Теперь напишите Подкатегорию в названии исполняемой функции или под любым другим именем по вашему выбору, как показано ниже.

Код:

 Sub Case_Statement1 ()

Концевой переводник 

Шаг 3: Поскольку мы создаем оператор case с числами, сначала определите целое число, как показано ниже.

.

VBA Select Case — Полное руководство

Оператор Select Case — это альтернативный способ написания операторов If / ElseIf.

Вы найдете эквивалент оператора Select Case в большинстве популярных языков программирования. На многих языках эквивалентным оператором является оператор Switch . Например, все языки Java, C #, C ++ и Javascript имеют оператор switch.

Краткое руководство по корпусу

Варианты корпуса Описание Примеры
Is Использование с операторами =,> ,,> =, Case Is = 5
Case Is = «Apple»
Case Is> 5
Case Is
До Используйте для диапазона чисел От 5 до 10
От 85 до 99
От «A» до «D»
Запятая Используйте запятую для включения нескольких условий для одного случая Вариант 1, 3, 9, 11
Случай 1, Is> 20, от 10 до 15
Без оператора То же, что «Is =» Кейс 5
Кейс «Яблоко»

Выбрать формат регистра

Формат оператора VBA Select Case выглядит следующим образом:

 Выбрать регистр [переменная]
    Дело [условие 1]
        [Положение 1]
    Дело [условие 2]
        [Положение 2]
    Случай [условие n]
        [Заявление №]
    Case Else
        [Заявление еще]
Конец Выбрать
 

Ниже приводится простой пример использования Select Case Statement:

https: // excelmacromastery.com /
Общедоступная подпрограмма Select_Case_Example ()

    'Прочитать значение из ячейки A1 на Sheet1
    Dim airportCode As String
    airportCode = Sheet1.Range ("A1"). Значение
    
    'Распечатать название аэропорта в окне немедленного доступа (Ctrl + G)
    Выберите аэропорт КейсаКод
        Дело "ЛХР"
            Debug.Print "Лондонский аэропорт Хитроу"
        Дело "JFK"
            Debug.Print "Джон Ф. Кеннеди"
        Дело "ГРЕХ"
            Debug.Print "Сингапур"
    Конец Выбрать

Конец подписки
 

Приведенный ниже код эквивалентен оператору If :

https: // excelmacromastery.com /
Общедоступная подпрограмма If_Example ()

    'Прочитать значение из ячейки A1 на Sheet1
    Dim airportCode As String
    airportCode = Sheet1.Range ("A1"). Значение
    
    'Распечатать название аэропорта в окне немедленного доступа (Ctrl + G)
    Если airportCode = "LHR" Тогда
            Debug.Print "Лондонский аэропорт Хитроу"
    ElseIf airportCode = "JFK" Тогда
            Debug.Print "Джон Ф. Кеннеди"
    ElseIf airportCode = "SIN" Тогда
            Debug.Print "Сингапур"
    Конец, если

Конец подписки
 

Мы используем оператор Select Case , поскольку он обеспечивает большую гибкость, чем оператор If .Мы увидим больше выше этого ниже.

Использование оператора двоеточия

Мы можем использовать символ двоеточия «:» , чтобы наши операторы Case выглядели более аккуратно. Символ двоеточия позволяет нам разместить две строки кода VBA на одной строке. В VBA они по-прежнему рассматриваются как две строки, но код выглядит аккуратнее:

 Выбрать аэропорт Кейс
    Кейс "LHR": Debug.Print "Лондонский Хитроу"
    Дело "JFK": Отладка. Печать "Джон Ф. Кеннеди"
    Кейс «ГРЕХ»: Отладка.Печать "Сингапур"
Конец Выбрать
 

Код между описаниями случаев

В предыдущих примерах у нас была только одна строка кода для каждого условия Case. Вы можете иметь столько строк кода, сколько хотите. Однако по возможности рекомендуется использовать одну строку. Цель оператора Select Case — сделать код читаемым.

В следующем примере у нас есть несколько строк кода для дела «Лондон» :

https: // excelmacromastery.com /
Sub MultiLine ()

    Тусклый город как струна
    city ​​= Sheet1.Range ("A1"). Значение

    Выберите город обращения
        Кейс "Лондон"
            'было бы лучше в другой суб
            Счетчик = Счетчик + 1
            х = 6
            а = 5
        Case Else
            Debug.Print "другой город"
    Конец Выбрать
    
Конец подписки
 

Если у нас есть несколько строк, мы могли бы поместить их в подпрограмму, а затем назвать эту подпрограмму:

 Выбрать город дела
    Кейс "Лондон"
        Вызов UpdateValues
    Case Else
        Отлаживать.Печать «другой город»
Конец Выбрать
 

Case Else

Оператор Case Else используется с Select Case . Это эквивалент оператора Else , используемого с If . Проще говоря, это означает «если не было выбрано никаких других вариантов, выберите этот».

Case Else часто используется для проверки того, что было предоставлено допустимое значение. В приведенном ниже примере он используется для проверки правильности кода аэропорта:

.

https: // excelmacromastery.com /
Общедоступная подпрограмма Select_Case_Else ()

    'Прочитать значение из ячейки A1 на Sheet1
    Dim airportCode As String
    airportCode = Sheet1.Range ("A1"). Значение
    
    'Распечатать название аэропорта в окне немедленного доступа (Ctrl + G)
    Выберите аэропорт КейсаКод
        Дело "ЛХР"
            Debug.Print "Лондонский аэропорт Хитроу"
        Дело "JFK"
            Debug.Print "Джон Ф. Кеннеди"
        Дело "ГРЕХ"
            Debug.Print "Сингапур"
        Case Else
            MsgBox "Недействительный код аэропорта.", vbInformation
    Конец Выбрать

Конец подписки
 

Использование выбранного регистра с числами

Мы можем использовать ключевое слово To , чтобы указать диапазон чисел:

https://excelmacromastery.com/
Выбрать отметки регистра
    Дело 85 к 100
        Debug.Print "Высокое различие"
    Дело 75 - 84
        Debug.Print "Отличие"
    Дело 55-74
        Debug.Print "Кредит"
    Дело 40-54
        Отлаживать.Распечатать "Пропуск"
    Case Else
         Debug.Print "Fail"
Конец Выбрать
 

Выбрать корпус

Мы можем использовать ключевое слово Is , если мы хотим использовать такие операторы, как =,>, <и т. Д.

В приведенном ниже примере я переписал предыдущий оператор Select Case , используя Is вместо . To :

https://excelmacromastery.com/
Выбрать отметки регистра

    Случай> = 85
        Отлаживать.Печать "Высокое различие"
    Случай> = 75
        Debug.Print "Отличие"
    Случай> = 55
        Debug.Print "Кредит"
    Случай> = 40
        Debug.Print "Pass"
    Case Else
        'Для всех остальных марок
        Debug.Print "Fail"
        
Конец Выбрать
 

Нам не нужно использовать ключевое слово Is при использовании равенства. Две строки ниже эквивалентны:

 Корпус "LHR"
Case Is = "LHR"
 

Так вот эти двое:

 Корпус 10
Случай Is = 10
 

Выбрать несколько значений регистра

В одной строке может быть несколько условий.Мы просто разделяем их запятыми:

 Случаи> 85, 70–75, 83
 

 Корпус 2, 4, 6, 8
    Debug.Print "Четные числа"
Случай 1, 3, 5, 7
    Debug.Print "Нечетные числа"
 

Ниже приведен пример использования нескольких строк:

https://excelmacromastery.com/
Общедоступная подпрограмма Select_Case_Multi ()

    Тусклый город как струна
    'Изменить значение для проверки
    city ​​= "Дублин"
    
    'Вывести название аэропорта по коду
    Выберите город обращения
        Кейс «Париж», «Лондон», «Дублин»
            Отлаживать.Печать "Европа"
        Корпус «Сингапур», «Ханой»
            Debug.Print "Азия"
        Case Else
            MsgBox "Недопустимый город.", VbInformation
    Конец Выбрать

Конец подписки
 

Сравнение верхнего и нижнего регистра

Мы можем использовать Option Compare в верхней части модуля VBA. Это влияет на то, как строки сравниваются в этом модуле.

Мы можем использовать Binary или Text с Option Compare .

 Опция Сравнить Двоичный
 
 Option Сравнить текст
 

  1. Двоичный означает, что VBA проверяет регистр букв с учетом регистра.
  2. Текст означает, что VBA игнорирует регистр букв — без учета регистра.

Если мы установим «Option Compare Binary», то следующие операторы If и Case будут оцениваться как ложные.

Если мы установим «Option Compare Text», они получат значение true:

 city = "Дублин"

'true для "Option Compare Text"
'false для "Option Compare binary"
Если city = "DUBLIN" Тогда
Конец, если

Выберите город обращения
    'true для "Option Compare Text"
    'false для "Option Compare binary"
    Кейс "ДУБЛИН"
Конец Выбрать
 

Вы можете попробовать следующий пример.Переключитесь между Binary и Text и проверьте результаты:

 'Переключение между «двоичным» и «текстовым» и сравнение результатов
https://excelmacromastery.com/
Вариант Сравнить Двоичный

Частная подписка Select_Case_Multi ()

    Тусклый город как струна
    city ​​= "dublin"
    
    'Вывести название аэропорта по коду в
    'Немедленное окно (Ctrl + G).
    Выберите город обращения
        Кейс "ДУБЛИН"
            Отлаживать.Печать "Европа"
        Case Else
            Debug.Print «Город не действующий».
    Конец Выбрать

Конец подписки
 

Статьи по теме

Заявление VBA If

Окно сообщений VBA

Что дальше?

Бесплатное руководство по VBA Если вы новичок в VBA или хотите отточить свои существующие навыки VBA, почему бы не попробовать The Ultimate VBA Tutorial.

Связанное обучение: Получите полный доступ к обучающим вебинарам по Excel VBA и всем учебным материалам.

( ПРИМЕЧАНИЕ: Планируете создание приложения VBA или управление им? Узнайте, как создать 10 приложений Excel VBA с нуля.)

Получите бесплатную электронную книгу

Не стесняйтесь подписаться на мой информационный бюллетень и получать эксклюзивный контент VBA, который вы не можете найти здесь, в блоге, а также бесплатный доступ к моей электронной книге How to Ace the 21 Most Common Question in VBA , которая полна примеров, которые вы можете использовать в своем собственном коде.

.

VBA Выбор функции регистра | Как использовать Excel VBA Select Case?

VBA Выбрать корпус

VBA Select Case — одно из аналогичных условий, которые мы используем для проверки нескольких условий вместо традиционного условия IF в VBA. Select Case работает точно так же, как условие IF.

Подобно тому, как мы тестируем несколько условий и выводим результаты с условием IF, аналогично с помощью SELECT CASE мы проверяем условие и выводим результаты. В этой статье я познакомлю вас с идеологией оператора SELECT CASE.

Формула VBA Выбрать случай

Как использовать Excel VBA Выберите Case ?

Давайте разберемся, как использовать функцию VBA Select Case Excel с несколькими примерами.

Функция выбора регистра VBA — пример № 1

Предположим, у вас есть значение в ячейке A1, и вы хотите проверить, больше ли это значение 100 или нет.

Если значение больше 100, нам нужен результат «Больше 100» в ячейке B1, иначе нам нужен результат «Меньше 100».Код ниже сделает эту работу за нас.

 Sub SelectCase_Ex ()

Выберите диапазон регистра ("A1"). Значение

Число случаев> 100
    Диапазон ("B1"). Значение = "Более 100"
Case Else
    Диапазон ("B1"). Значение = "Менее 100"

 Конец Выбрать

Концевой переводник 

.

VBA Select Case — все, что вам нужно знать

Сегодняшнее внимание уделяется оператору VBA Select Case, который часто удобно использовать, когда вам необходимо выполнить другой код в зависимости от значения определенного выражения. Обычно вы не используете Select Case, когда вам нужно различать менее трех конкретных значений выражения. В этом посте я хочу осветить как How использования Select Case, так и When and Why .

VBA Выберите чехол

Начнем с определения и нескольких простых примеров использования оператора VBA Select Case.

Выбрать определение регистра

Ниже приводится определение оператора Select Case:

Выберите Case testexpression
    [Список выражений регистра
        [ заявления ] ]
    ...
    [Case Else
        [elsestatements]]
Конец Выбрать
 

Блок Select Case в основном содержит список случаев (выражений «список выражений»), за которым следует список операторов, которые должны выполняться всякий раз, когда определенный «список выражений» оценивается как истинный или соответствует «выражению теста».Выполняются только операторы для первого совпадающего Case. Остальные будут опущены. Также обратите внимание на заявление Case Else . Case Else определяет список «elsestatements», которые должны выполняться, если ни один из оставшихся случаев не соответствует / оценивается как истина. Это сценарий аварийного переключения, если хотите, или просто случай, охватывающий весь оставшийся спектр случаев. Хватит этого — время для некоторых примеров.

Select Примеры случаев

Тусклое направление как строка
'...
Выберите направление регистра
   Кейс "Вперед"
      Debug.Print "Вперед!"
   Кейс "Назад"
      Debug.Print "Назад!"
   Корпус "Левый"
      Debug.Print "Поверните налево!"
   Корпус "Правый"
      Debug.Print "Поверните направо!"
Конец Выбрать
 

Это хороший пример того, как применять оператор Select Case. Select Case обычно используется, когда у нас есть дискретный спектр значений, для которых есть отдельные операторы, которые мы хотим выполнить для каждого.Select Case также работает для номеров:

При ошибке Возобновить Далее
'...
Выберите Case Err.Number
    Случай 11:
        Debug.Print "Разделить на ноль!"
        Err.Clear
    Случай 6:
        Debug.Print "Переполнение!"
        Err.Clear
    Случай еще:
        Debug.Print "Другая ошибка"
        Err.Clear
Конец Выбрать
 

Err для тех, кто не знаком с обработкой ошибок VBA — это объект, управляющий возникшими ошибками. Когда возникает ошибка, ошибка Err.Числовая переменная заполняется номером VBA обнаруженной ошибки. Если мы хотим определить отдельные обработчики для каждого номера ошибки, оператор VBA Select Case определенно будет подходящим инструментом.

«testexpression» VBA Select Case должен оценивать один из поддерживаемых типов данных : Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, Short, Single, String

Выберите вариант

С Select Case мы привыкли к тому, что каждый случай указывается для определенного единственного значения нашего «выражения теста».Однако VBA поддерживает также оператор Is , который можно использовать в тандеме с выражением Case для сравнения нашего значения с помощью таких операторов, как больше (>), меньше (=) и т. Д.

Dim ageUS как Long
'... в большинстве штатов ...
Выберите возраст случаяUS
   Случай <17
      Debug.Print «Вы не можете водить машину или употреблять алкоголь»
   Случай <21
      Debug.Print «Вы можете водить машину, но не можете пить алкоголь»
   Case Else
      Отлаживать.Печать "Теперь можно напиться или погонять. Но не одновременно!"
Конец Выбрать
 

Оператор Is снова будет оценивать сверху и выполнять операторы только для первого истинного выражения Case. Следовательно, если вам 16 лет, вы не получите оставшиеся 2 сообщения.

Выбрать корпус с диапазонами

Аналогично Select Case позволяет указать диапазон значений с помощью оператора To :

Dim ageUS как Long
'... в большинстве штатов...
Выберите возраст случаяUS
   Случай от 0 до 16
      Debug.Print «Вы не можете водить машину или употреблять алкоголь»
   Случай 17-20
      Debug.Print «Вы можете водить машину, но не можете пить алкоголь»
   Case Else
      Debug.Print «Теперь можно напиться или погонять. Но не одновременно!»
Конец Выбрать
 

Выбрать регистр с перечислением

В некоторых случаях может потребоваться перечислить определенные значения, которые должны обрабатываться общими операторами. В таких случаях обязательно разделяйте их запятой «,».

Тусклое имя как строка
'...
Выберите название обращения
   Кейс «Майкл», «Майк», «Майки»
      Debug.Print "Майкл"
   Кейс "Томас", "Том", "Томми"
      Debug.Print "Томас"
   Дело «Эндрю», «Энди»:
      Debug.Print "Андрей"
   Case Else
      Debug.Print "Базовое имя неизвестно"
Конец Выбрать
 

Выбрать регистр против If-Else против Iif

Теперь, когда мы разобрались со статусом VBA Select Case, давайте напомним другие операторы условий в VBA, которые у нас есть, и когда их использовать.

Когда использовать Select Case?

Как вы, наверное, уже узнали, Select Case следует использовать только тогда, когда вам нужно вычислить одно выражение (в Select Case), которое предоставит одно значение. Это значение можно обрабатывать отдельно для разных случаев. Cases может обрабатывать отдельные значения, перечисления и числовые сравнения (>, =, = и т. Д.), Но они не могут оценивать отдельные выражения! Это когда мы должны выполнять условия If-Else или функцию Iif.
Выберите корпус: как это работает

Когда использовать If-ElseIf-Else

Используйте операторы If-ElseIf-Else, когда:

  • Вам необходимо оценить один вариант , который не просто возвращает значение
  • Каждую опцию необходимо оценивать как отдельное выражение

Не используйте If-ElseIf-Else, когда:

  • Вам необходимо определить одну переменную на основе определенного условия (используйте для этого Iif - следующий раздел)
  • Вам необходимо оценить одно выражение и выполнить разные блоки кода в зависимости от результата (для этого используйте Select Case)

If-ElseIf-Else: как это работает

Когда использовать функцию Iif?

Если вы не слышали о функции Iif, прочтите этот пост.Поскольку это отличная простая функция, которая не может помочь сократить код VBA и сделать его более понятным. Используйте функцию Iif, когда вам нужно оценить одно логическое выражение , чтобы вернуть одно из двух значений. Простой пример ниже:

Dim i как Integer, str как String
'...
str = Iif (i = 10, "= 10", "<> 10")
 

Функция IIF: как это работает
.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *