Excel case statements can be handled with either SWITCH function or nested IF statements. A popular use for the IF function is creating nested formulas that can check for various criteria. However, nested IF statements can get pretty complicated and cumbersome when dealing with several conditions.
Excel has introduced the SWITCH function which can essentially do what nested IF functions can, using only one function. In this article, we’re going to take a look at the differences between these two Excel case statements and how you can compare several conditions more efficiently. You can download our sample workbook below.
The Basics of the IF Function
The IF function is one of the most popular functions of Excel. It allows creating conditions, on which a logic can be implemented. The IF function gives a TRUE or FALSE result depending on the outcome of the condition check.
There really are no other alternatives to the IF function, therefore, users typically prefer using nested structures which means using the function over and over again. Let’s see how this works on an example. Below is a set of IF formulas inside one another.
This formula checks for 4 conditions, «S», «M», «L» and “other” to give a measurement. To do this, we need 2 extra IF functions which are connected to the negative result argument of the previous one. The logic in this structure is to continue the formula if first condition is not met. Then look at the second condition and continue likewise until the criteria is satisfied.
As you can imagine, nested IF statements become harder to read and maintain as the number of condition increase. The SWITCH function was introduced as a user-friendly alternative to alleviate the burden of too many IF formulas.
The Better Alternative: SWITCH Function
The SWITCH function was first introduced in Excel 2016 not to replace the IF function, but instead as an alternative to nested IF formulas. The SWITCH function evaluates the value in its first argument against the value-result pairs, and returns the result from the matched pair if there is a match, or the default value if there are none.
Syntax
=SWITCH(expression, value1, result1, [default or value2, result2],…[default or value3, result3])
Argument | Description |
expression | Expression is the value (i.e. a number, date, or text) that will be compared against value1…value126. |
value1…value126 | valueN (nth value parameter) is the value that will be compared against an expression. |
result1…result126 | resultN (nth result parameter) is the value to be returned when the corresponding valueN argument that matches the expression. resultN must be entered for each corresponding valueN argument. |
default | (Optional) default is the value to be returned in case there are no matches in any valueN expressions. The default has no corresponding resultN expression. default must be the final argument of the function.
If a default value is not defined and no matches are found, the formula returns #N/A error. |
Note: Because functions are limited to 254 parameters, you can use up to 126 pairs of value and result arguments.
SWITCH vs. IF
Let’s revisit the measurement example using the SWITCH function this time.
The first advantage is the number of formulas used in this argument. When creating a nested IF statement, you need to be actively tracing where you’re at in the formula at each step. Using the SWITCH formula, you can do what 126 IF functions could, using a single function.
Note: It is not advisable to create a SWITCH function that contains 126 value-result pairs. Instead, try using the VLOOKUP function for matching large condition sets. For more information about the VLOOKUP, check out our HOW TO VLOOKUP article.
The second advantage comes from the fact that your formula is going to be much shorter in most cases. Formula text with the SWITCH function is shorter, and easier to read.
Содержание
- Как написать заявление о прецеденте в Excel (с примером)
- Пример: оператор Case в Excel
- Дополнительные ресурсы
- Оператор Select Case
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- Excel что такое case
- Оператор Select. Case (Visual Basic)
- Синтаксис
- Компоненты
- Remarks
- Пример
Как написать заявление о прецеденте в Excel (с примером)
Оператор case — это тип оператора, который проходит через условия и возвращает значение при выполнении первого условия.
Самый простой способ реализовать оператор case в Excel — использовать функцию ПЕРЕКЛЮЧАТЕЛЬ() , которая использует следующий базовый синтаксис:
Эта конкретная функция просматривает ячейку A2 и возвращает следующее значение:
- « На страже », если ячейка A2 содержит «G»
- « Вперед », если ячейка A2 содержит «F»
- « По центру », если ячейка A2 содержит «C»
- « Нет », если ячейка A2 не содержит ни одного из предыдущих значений.
В следующем примере показано, как использовать эту функцию на практике.
Пример: оператор Case в Excel
Предположим, у нас есть следующий список баскетбольных позиций:
Мы будем использовать следующую функцию SWITCH() , чтобы вернуть определенное имя позиции в столбце B на основе значения в столбце A:
Мы введем эту формулу в ячейку B2 , а затем скопируем и вставим ее в каждую оставшуюся ячейку в столбце B:
Обратите внимание, что эта формула возвращает следующие значения в столбце B:
- « Guard », если столбец A содержит «G»
- « Вперед », если столбец A содержит «F»
- « По центру », если столбец A содержит «C»
- « Нет », если столбец A не содержит ни одного из предыдущих значений.
Обратите внимание, что последнее значение в столбце B возвращает значение « Нет », поскольку мы не указали конкретное значение для возврата «Z» в формуле.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:
Источник
Оператор Select Case
Выполняет несколько групп операторов в зависимости от значения выражения.
Синтаксис
Выборвыражения для тестирования варианта
[ Caseexpressionlist-n [ statements-n ]]
[ Case Else [ elsestatements ]]
End Select
Синтаксис оператора Select Case состоит из следующих частей:
Part | Описание |
---|---|
выражение testexpression | Обязательно. Любое числовое выражение или строковое выражение. |
expressionlist-n | Обязательный параметр, если используется оператор Case.
Разделенный список одной или нескольких из следующих форм: expression, expressionToexpression, Iscomparisonoperatorexpression. Ключевое словоTo задает диапазон значений. Если вы используете ключевое слово To, то наименьшее значение должно быть указано до To. Используйте ключевое слово Is с операторами сравнения (кроме Is и Like) для указания диапазона значений. Если этот параметр не указан, автоматически вставляется ключевое слово Is. |
statements-n | Необязательный параметр. Одна или несколько инструкций, выполняемых, если выражение testexpression соответствует любой части expressionlist-n. |
elsestatements | Необязательный параметр. Один или несколько операторов, которые выполняются, если testexpression не соответствует какому-либо из выражений Case. |
Замечания
Если выражение testexpression соответствует любому выражениюсписка выраженийcase, операторы, следующие за этим предложением Case, выполняются до следующего предложения Case или до последнего предложения до end select. Затем контроль передается оператору после End Select. Если testexpression совпадает с выражением expressionlist в нескольких предложениях Case, выполняются только операторы после первого совпадения.
Предложение Case Else используется для указания того, что выражения elsestatements выполняются, если не обнаружено совпадение между testexpression и expressionlist в других предложениях Case. Хотя это необязательно, рекомендуется использовать оператор Case Else в блоке Select Case для обработки непредвиденных значений testexpression. Если список выраженийcase не соответствует testexpression и оператор Case Else отсутствует, выполнение продолжается в инструкции End Select.
Используйте несколько выражений или диапазонов в каждом предложении Case . Например, допустима следующая строка.
Оператор сравнения Is — не то же самое, что ключевое слово Is, используемое в операторе Select Case.
Вы также можете указать диапазоны и несколько выражений для строк символов. В следующем примере case сопоставляет строки, которые точно равны , строки, которые находятся everything между nuts и soup в алфавитном порядке, и текущее значение TestItem :
Операторы Select Case могут быть вложенными. Каждый вложенный оператор Select Case должен иметь соответствующую инструкцию End Select .
Пример
В этом примере оператор Select Case используется для оценки значения переменной. Второе предложение Case содержит значение оцениваемой переменной, поэтому выполняется только связанный с ним оператор.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Excel что такое case
При создании сложных программ один из ключевых моментов — возможность предусмотреть несколько вариантов развития событий. Самый простой и классический пример — оператор «If . Then . Else . End«, который позволяет выбрать одно из двух действий в зависимости от результатов проверки каких-либо значений. Бывает, что в результате такой проверки необходимо выбрать из множества вариантов. Один из выходов: добавить множество «. ElseIf . «, что несколько усложняет синтаксис программы (лёгкость её чтения). Однако это очень мощный оператор, открывающий большие возможности. Подробнее о нём можно узнать здесь.
Альтернативой оператору «If . End» служит оператор «Select Case» (с английского «Select Case» можно перевести как «Выбор Ситуации»), который упрощает восприятие кода «на глаз». И если «If . End» оператор в каждом своём «ElseIf» вынужден обращаться к проверяемым значениям снова и снова (допустим, выражение каждый раз одинаковое), то «Select Case» делает это только один раз, что позволяет последнему на больших массивах данных работать быстрее. Этот оператор позволяет удобно задать ветвление программы из одной точки в большое количество веток. То есть в основном применяется при множественных условиях проверки, когда проверяемых условий больше двух.
Структура оператора «Select Case».
Давайте посмотрим, как выглядит обобщённая структура оператора и разберём, что есть что (разные примеры частного использования кода будут приведены в конце статьи):
В качестве куска [Значение] можно вставить любую переменную или свойство, значение которой или которого Вы можете проверить. Можно также проверять значение конкретной ячейки. При этом работать можно не только с числами, но и с текстами. И даже с булевыми значениями TRUE/FALSE («Правда» и «Ложь»), о чем знают не все.
[Конкретное Значение] — это то, с чем сравнивается [Проверяемое Значение]. И, если одно удовлетворяет другому, то выполняется [Некоторое Действие]. Есть несколько вариантов записи для блока [Конкретное Значение]. Для текстовых и числовых значений можно записывать разные значения через запятую:
Для чисел можно выбирать диапазоны:
Также для чисел можно использовать логический оператор сравнения вместе с частицей «Is«:
Допустимо использовать и логические операторы, что позволит предусматривать сложнейшие случаи и проводить параллельные сравнения с другими переменными. Кроме оператора «Or», который заменяется обычной запятой.
[Некоторое Действие] может быть абсолютно любым. Если вы его пропускаете — то для данного случая программа будет бездействовать. «Case [Конкретное Значение]» вместе с частью [Некоторое Действие] складываются в один блок:
Таких блоков может быть любое количество, которое уложится в предельные размеры процедуры (она должна весить не более 64 килобайт). Полезно знать, что VBA просматривает соответствие [Конкретного Значения] и [Проверяемого Значения] вдоль по блокам сверху вниз. То есть, у Вас может быть два блока с одинаковым «Case«, но выполнится только тот, который будет раньше найден программой при просмотре кода сверху вниз.
Case Else — это все другие случаи, которые не подошли ни под одно другое [Конкретное Значение] во всех блоках оператора «Select Case«. Если блок «Case Else» отсутствует и ни один другой блок не подошёл, то программа делает логичное «ничего». Case Else должен быть последним проверяемым случаем среди всех блоков проверки в операторе. После него других блоков быть не должно, иначе получим синтаксическую ошибку «Case without Select Case«.
В конце оператора должен стоять «End Select«, который служит «точкой» в «предложении» оператора.
Примеры использования.
Рассмотрим несколько примеров использования кода и начнём с самого простого. В первом примере в зависимости от значения Х выводится сообщение.
Второй пример показывает некоторые виды записи проверяемого значения. В зависимости от количества листов в книге с макросом выводится разное сообщение. Обратите внимание, что если листов в книге 7, то первым сработает “Case 7”, хотя условие “Case 5 to 12” тоже подходит, но стоит позже.
Третий пример ориентируется на булево значение TRUE или FALSE. Проверяется, виден или скрыт последний лист в текущей книге с макросом. С помощью двоеточия может заменяться перенос строки для получения более изящного кода.
Четвёртый пример показывает, что «Case» может ориентироваться и на другие переменные. В данном случае будем проверять равенство трёх переменных с помощью логического оператора «And»:
Пятый пример показывает, как через запятую в проверяемом значении для «Case» можно указать целый набор чисел. Допустим, есть некоторая функция и мы проверяем, может ли наше число в этой функции использоваться. По условию, нас устраивают числа в диапазоне от 5 (не включая 5) до минус бесконечности, от 12 до 15 включая концы и от 20 (включая 20) до плюс бесконечности.
Подводя черту, замечу, что оператор «Select Case» по структуре довольно прост и удобен в использовании. Он менее гибок по сравнению с «If … End», если по ходу проверок требуется менять проверяемое значение, но значительно выигрывает при разнообразных проверках одного и того же выражения. Для чего собственно и был создан.
Источник
Оператор Select. Case (Visual Basic)
Выполняет одну из нескольких групп инструкций в зависимости от значения выражения.
Синтаксис
Компоненты
Термин | Определение |
---|---|
testexpression | Обязательный. Выражение. Должен оцениваться как один из простых типов данных ( Boolean , Byte , Char Integer Double Object SByte Date Decimal Short Long , , , Single , , String , и ). UShort UInteger ULong |
expressionlist | Обязательный в инструкции Case . Список предложений выражений, представляющих значения соответствия для testexpression . Несколько предложений выражений разделяются запятыми. Каждое предложение может принимать одну из следующих форм: |
— expression1 To expression2
— [ Is ] comparisonoperatorexpression
— выражение
Используйте ключевое To слово, чтобы указать границы диапазона значений соответствия для testexpression . Значение expression1 должно быть меньше или равно значению expression2 .
Используйте ключевое Is слово с оператором сравнения ( = , , <> , , > или >= ) для указания ограничения значений соответствия для testexpression . Если ключевое Is слово не указано, оно автоматически вставляется перед оператором сравнения.
Форма, указывающая только expression , рассматривается как особый случай Is формы, в которой оператор сравнения является знаком равенства ( = ). Эта форма оценивается как testexpression = expression .
Выражения в expressionlist любом типе данных могут иметь любой тип данных, если они неявно преобразуются в тип testexpression и допустимы comparisonoperator для двух типов, с которыми он используется. statements Необязательный элемент. Одна или несколько инструкций, следующих за Case выполнением, если testexpression соответствует любому предложению в expressionlist . elsestatements Необязательный элемент. Одна или несколько инструкций, следующих за Case Else выполнением, если testexpression ни одно предложение не expressionlist соответствует ни одному из Case операторов. End Select Завершает определение Select конструкции . Case .
Если testexpression соответствует любому Case expressionlist предложению, операторы, следующие за этим Case оператором, Case Else выполняются до следующего Case оператора или End Select оператора. Затем элемент управления передается в следующую инструкцию End Select . Если testexpression соответствует предложению expressionlist в нескольких Case предложениях, то выполняются только инструкции после первого выполнения сопоставления.
Инструкция Case Else используется для введения elsestatements для выполнения, если между testexpression предложением и expressionlist предложением в других Case инструкциях не найдено совпадения. Хотя это не требуется, рекомендуется иметь Case Else в конструкции Select Case инструкцию для обработки непредвиденных testexpression значений. Если предложение не Case expressionlist совпадает testexpression и оператор отсутствует Case Else , элемент управления передается в следующую End Select инструкцию.
В каждом Case предложении можно использовать несколько выражений или диапазонов. Например, допустима следующая строка.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
Ключевое Is слово, используемое в Case инструкциях, Case Else не совпадает с оператором Is, который используется для сравнения ссылок на объекты.
Можно указать диапазоны и несколько выражений для символьных строк. В следующем примере соответствует любой строке, Case точно равной «яблокам», имеет значение между «nuts» и «суп» в алфавитном порядке или содержит то же значение, что и текущее значение testItem .
Case «apples», «nuts» To «soup», testItem
Параметр Option Compare может повлиять на сравнение строк. Под Option Compare Text строками «Яблоки» и «яблоки» сравниваются как равные, но в разделе Option Compare Binary , они не делают этого.
Оператор Case с несколькими предложениями может проявлять поведение, известное как кратковременное замыкание. Visual Basic вычисляет предложения слева направо, и если он создает совпадение с testexpression , остальные предложения не оцениваются. Сокращение может повысить производительность, но может привести к непредвиденным результатам, если ожидается, что каждое выражение expressionlist будет вычисляться. Дополнительные сведения о кратковременном замыкании см. в разделе логических выражений.
Если код в Case блоке инструкций или Case Else блока инструкций больше не должен выполнять инструкции в блоке, он может выйти из блока с помощью инструкции Exit Select . Это немедленно передает управление в следующую инструкцию End Select .
Select Case конструкции могут быть вложенными. Каждая вложенная Select Case конструкция должна иметь соответствующую инструкцию End Select и должна полностью содержаться в одном Case блоке Case Else или блоке инструкций внешней Select Case конструкции, в которой она вложена.
Пример
В следующем примере используется Select Case конструкция для записи строки, соответствующей значению переменной number . Вторая Case инструкция содержит значение, соответствующее текущему значению number , поэтому инструкция, записывающая «От 6 до 8 включительно», выполняется.
Источник
Оператор Select Case, выполняющий одну или более групп операторов VBA Excel в зависимости от значения управляющего выражения. Синтаксис, компоненты, примеры.
Оператор Select Case используется в VBA Excel для управления отдельными блоками операторов в зависимости от значения управляющего выражения (переменной) и сравнительных условий, задаваемых ключевым словом Case.
Синтаксис оператора Select Case
Select Case выражение Case условие 1 [операторы 1] Case условие 2 [операторы 2] ——————————— Case условие n [операторы n] Case Else [операторы] 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 выглядит изящней.
17 авг. 2022 г.
читать 1 мин
Оператор case — это тип оператора, который проходит через условия и возвращает значение при выполнении первого условия.
Самый простой способ реализовать оператор case в Excel — использовать функцию ПЕРЕКЛЮЧАТЕЛЬ() , которая использует следующий базовый синтаксис:
=SWITCH( A2 , "G", "Guard", "F", "Forward", "C", "Center", "None")
Эта конкретная функция просматривает ячейку A2 и возвращает следующее значение:
- « На страже », если ячейка A2 содержит «G»
- « Вперед », если ячейка A2 содержит «F»
- « По центру », если ячейка A2 содержит «C»
- « Нет », если ячейка A2 не содержит ни одного из предыдущих значений.
В следующем примере показано, как использовать эту функцию на практике.
Пример: оператор Case в Excel
Предположим, у нас есть следующий список баскетбольных позиций:
Мы будем использовать следующую функцию SWITCH() , чтобы вернуть определенное имя позиции в столбце B на основе значения в столбце A:
=SWITCH( A2 , "G", "Guard", "F", "Forward", "C", "Center", "None")
Мы введем эту формулу в ячейку B2 , а затем скопируем и вставим ее в каждую оставшуюся ячейку в столбце B:
Обратите внимание, что эта формула возвращает следующие значения в столбце B:
- « Guard », если столбец A содержит «G»
- « Вперед », если столбец A содержит «F»
- « По центру », если столбец A содержит «C»
- « Нет », если столбец A не содержит ни одного из предыдущих значений.
Обратите внимание, что последнее значение в столбце B возвращает значение « Нет », поскольку мы не указали конкретное значение для возврата «Z» в формуле.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:
Excel: как найти уникальные значения из нескольких столбцов
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