Select case формула excel

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.

Excel Case Statements: SWITCH Function Versus Nested IF

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.

Excel Case Statements: SWITCH Function Versus Nested IF

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.

Excel Case Statements: SWITCH Function Versus Nested IF

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 Statements: SWITCH Function Versus Nested IF

Оператор 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 выглядит изящней.

При создании сложных программ один из ключевых моментов — возможность предусмотреть несколько вариантов развития событий. Самый простой и классический пример — оператор «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

  • Редакция Кодкампа

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:

оператор case в Excel

Обратите внимание, что эта формула возвращает следующие значения в столбце B:

  • « Guard », если столбец A содержит «G»
  • « Вперед », если столбец A содержит «F»
  • « По центру », если столбец A содержит «C»
  • « Нет », если столбец A не содержит ни одного из предыдущих значений.

Обратите внимание, что последнее значение в столбце B возвращает значение « Нет », поскольку мы не указали конкретное значение для возврата «Z» в формуле.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:

Excel: как найти уникальные значения из нескольких столбцов
Excel: как сопоставить два столбца и вернуть третий

Написано

Редакция Кодкампа

Замечательно! Вы успешно подписались.

Добро пожаловать обратно! Вы успешно вошли

Вы успешно подписались на кодкамп.

Срок действия вашей ссылки истек.

Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.

Успех! Ваша платежная информация обновлена.

Ваша платежная информация не была обновлена.

Without reference to the original problem (which I suspect is long since solved), I very recently discovered a neat trick that makes the Choose function work exactly like a select case statement without any need to modify data. There’s only one catch: only one of your choose conditions can be true at any one time.

The syntax is as follows:

CHOOSE( 
    (1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
    RESULT_1, RESULT_2, ... , RESULT_N
)

On the assumption that only one of the conditions 1 to N will be true, everything else is 0, meaning the numeric value will correspond to the appropriate result.

If you are not 100% certain that all conditions are mutually exclusive, you might prefer something like:

CHOOSE(
    (1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
    OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)

That said, if Excel has an upper limit on the number of arguments a function can take, you’d hit it pretty quickly.

Honestly, can’t believe it’s taken me years to work it out, but I haven’t seen it before, so figured I’d leave it here to help others.

EDIT: Per comment below from @aTrusty:
Silly numbers of commas can be eliminated (and as a result, the choose statement would work for up to 254 cases) by using a formula of the following form:

CHOOSE(
    1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2), 
    OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)

Note the second argument to the LOG clause, which puts it in base 2 and makes the whole thing work.

Edit: Per David’s answer, there’s now an actual switch statement if you’re lucky enough to be working on office 2016. Aside from difficulty in reading, this also means you get the efficiency of switch, not just the behaviour!

 

Здравствуйте.  
В одном из кодов, мне посоветовали применить конструкцию Select Case.  
Подскажите или покажите на небольшом примере, как применить конструкцию Select Case, так как с этой проверкой не знаком.  
Условие:  
“Если” в ячейки [n1] меняется свойство Value, “Затем” в ComboBox изменяется свойство RowSource, и так далее.
‘…  
“Если” в TextBox свойство Value=”” “Затем” в ComboBox свойство Value=”” “Еще” ComboBox свойство Value=[z1].Value

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

А в справку глянуть? Там и пример:  

  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

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

Это в справке такой пример?  
Интересно… А если вдруг нумбер дробный получился? :)

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

 

Ничего не понял  
На моем примере нельзя показать  

          If [N1].Value = «a» Then ComboBox.RowSource = «=$H$17:$H$20»
If [N1].Value = «b» Then ComboBox.RowSource = «=$H$22:$H$25»
If [N1].Value = «c» Then ComboBox.RowSource = «=$H$27:$H$27»
‘…  
If TextBox.Value = «» Then .ComboBox.Value = «» Else ComboBox.Value = [z1].Value

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Select Case [N1].Value ‘ Evaluate Number.
   Case «a»  
       ComboBox.RowSource = «=$H$17:$H$20»  
   Case «b»  
       ComboBox.RowSource = «=$H$22:$H$25»  
   Case «c»  
       ComboBox.RowSource = «=$H$27:$H$27»  
   End Select  
   ‘…  
   If TextBox.Value = «» Then .ComboBox.Value = «» Else ComboBox.Value = [z1].Value

    86677

Я сам — дурнее всякого примера! …

 

{quote}{login=KuklP}{date=30.08.2010 10:35}{thema=}{post}Select Case [N1].Value ‘ Evaluate Number.
   Case «a»  
       ComboBox.RowSource = «=$H$17:$H$20»  
   Case «b»  
       ComboBox.RowSource = «=$H$22:$H$25»  
   Case «c»  
       ComboBox.RowSource = «=$H$27:$H$27»  
   End Select  
   ‘…  
   If TextBox.Value = «» Then .ComboBox.Value = «» Else ComboBox.Value = [z1].Value

    86677{/post}{/quote}  
Теперь понял. Хотя не пойму преимущества данной конструкции.  
То что код более уплатненный?

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=Hugo}{date=30.08.2010 10:21}{thema=}{post}Например, на 8,5 врёт…{/post}{/quote} на 8,5 другое условие надо.  
Case 5 To 9    ‘ Number between 5 and 9.  
   Debug.Print «Between 5 and 9»

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

Да это так, ремарка… Могли бы в примере указать, что код рассчитан на целые числа.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=segail}{date=30.08.2010 10:39}{thema=Re: }{post}{quote}  
Теперь понял. Хотя не пойму преимущества данной конструкции.  
То что код более уплатненный?{/post}{/quote} Кому как…

Я сам — дурнее всякого примера! …

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

{quote}{login=segail}{date=30.08.2010 10:39}{thema=Re: }{post}  
… не пойму преимущества данной конструкции…{/post}{/quote}  
ИМХО, при большом числе анализируемух вариантов конструкция Select Case… Case…Case…End Select просто более наглядна и удобочитаема чем If…Else If…If…End If  
Хотя, могут быть, конечно, и какие-то тонкости-различия.  
Сам, например, только недавно узнал, что IIf, оказывается отличается от If и не всегда его заменяет (в IIf проверяется присутствие всех аргументов и если какого-нибудь из них нет, то выдаётся ошибка, а в If аргументы проверяются по очереди в порядке перечисления)

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 
 

Сила этого оператора в использовании списка условий, To и Is:  

  Case 1, 2, 5 To 7, Is >= 10

 

Ага, а еще у этого оператора есть такое применение:  

  Select Case True  
Case 1=2: Msgbox «Бред»  
Case [N1]=»a»: ComboBox.RowSource = «=$H$17:$H$20»
Case VarType(Number)=5: Msgbox «Double»  
End Select

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=The_Prist}{date=30.08.2010 10:43}{thema=Re: Re: }{post}Преимущество в том, что код получается быстрее, т.к. при первом же совпадении условия конструкция завершает свою проверку…{/post}{/quote}  
К сожалению, в VB и VBA применение select case медленнее, чем If-Then-Else.  
Но на С это (было) быстрее.

 

Юрий М

Модератор

Сообщений: 60574
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=Alex_ST}{date=30.08.2010 10:52}{thema=Re: Re: }{post}{quote}{login=segail}{date=30.08.2010 10:39}{thema=Re: }{post}{/post}{/quote}  
ИМХО, при большом числе анализируемух вариантов конструкция Select Case… Case…Case…End Select просто более наглядна и удобочитаема чем If…Else If…If…End If{/post}{/quote}  
Алекс, а вот конструкция типа  
If    
…  
ElseIf  
…  
ElseIf  
…  
Else  
End If  
Тоже неплохо читается. :-)

 

Tikr

Пользователь

Сообщений: 69
Регистрация: 01.01.1970

Tikr

Уважаемые ГУРУ и просто любители EXCEL помогите разобраться в макросе чето не идет  
Пример прилагается!)

 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

Sub new_()  
Dim g As Variant  
g = ActiveCell.Offset(0, -8)  
 For Row = 1 To 40  
   Select Case IsNumeric(g)  
   Case False  
   ActiveCell.FormulaR1C1 = «=(RC[-8]+RC[-8])»
   Case Else  
   ActiveCell = «»  
   End Select  
   ActiveCell.Offset(1, 0).Select  
 Next Row  
End Sub  
P.S. зачем складывать текст?

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

Tikr, чтоб заработало, можно и так изменить:  
Select Case True  
Но вообще весь код логически не правильный…  
И зачем складывать текст, и зачем 40 раз проделывать уже сделанную работу? Я о проверке…

 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

В код листа.  
Sub ttt()  
шапка = Cells(1, 11) ‘на всякий случай мумифицируем шапку  
With Columns(3)  
.SpecialCells(xlCellTypeConstants, xlTextValues).Offset(0, 8) = _  
«=(RC[-8]+RC[-8])»
End With  
Cells(1, 11) = шапка  ‘вернём шапку  
End Sub

 

Tikr

Пользователь

Сообщений: 69
Регистрация: 01.01.1970

Tikr

Спасибо за ответы!!  
Только у меня немного не получается!)  
я не буду складывать текст это я для примера сделал, оригинале бы состаял из другие формулы  
В идеале я бы хотел получить чтобы было два case условия (два разных слова) в диапозоне ячеек и уже согласно этим двум условиям вставлялись бы определенные формулы по ячейкам  
В примере к сожаление получается всего одно условие, и формула одна.))

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

Ваш пример вообще не правильно работает — 40 раз проверяет одну первую ячейку.  
А на Select Case True как раз легко построить такую проверку, как Вам нужно.

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

Sub new_2()  
   Dim g As Variant, r&  

     For r = 2 To 21  
       g = Cells(r, 3).Value  
       Select Case True  
       Case IsNumeric(g)  
           Cells(r, 11).FormulaR1C1 = «=(RC[-8]+RC[-8])»
       Case g = «Не определено»  
           Cells(r, 11) = «»  
       End Select  
   Next r  
End Sub

 

В данном случае с If короче и проще, ИМХО:  

  Sub new_3()  
Dim g As Variant, r&  

  For r = 2 To 21  
   g = Cells(r, 3).Value  
   If IsNumeric(g) Then  
       Cells(r, 11).FormulaR1C1 = «=RC[-8]+RC[-8]»
   ElseIf g = «Не определено» Then  
       Cells(r, 11) = «»  
   End If  
Next r  
End Sub

 

Tikr

Пользователь

Сообщений: 69
Регистрация: 01.01.1970

Tikr

Спасибо большое друзья за старания  
Пришлось немного поработать над текстом и всё заработало    
Правда надо еще время что доработать до автоматизма  
И я еще понимаю что еще мало что поминаю, ну не че формулы я раньше тоже плохо знал!)

 

Tikr

Пользователь

Сообщений: 69
Регистрация: 01.01.1970

Tikr

Еще вопросик))  
Может ли Case искать различное положение слов букв типа «а*с*», «сми*», «?ли?» а то пробую различные эти комбинации, а они не идут))  
Если да то как правильно эти комбинации надо писать?  
А если нет чем это можно заменить попроще, чтобы код несложный!? :)

 

Hugo

Пользователь

Сообщений: 23250
Регистрация: 22.12.2012

#27

24.11.2011 16:58:10

Sub tt()  
   Dim s  

     For Each s In Array(«аfggfсfgj», «sfdfdhfh», «смиапрар»)  
       Select Case True  
       Case s Like «а*с*»: MsgBox s & » = а*с*»  
       Case s Like «сми*»: MsgBox s & » = сми*»  
       Case Else: MsgBox s & » = Else»  
       End Select  
   Next  

  End Sub

В этом учебном материале вы узнаете, как использовать Excel оператор CASE с синтаксисом и примерами.

Описание

Оператор CASE в Microsoft Excel имеет функциональные возможности оператора IF-THEN-ELSE. Оператор CASE — это встроенная в Excel функция, которая относится к категории логических функций. Её можно использовать как функцию VBA в Excel. В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.

Синтаксис

Синтаксис оператора CASE в Microsoft Excel:

Select Case test_expression
Case condition_1
result_1
Case condition_2
result_2

Case condition_n
result_n
[ Case Else
result_else ]
End Select

Аргументы или параметры

test_expression
Строковое или числовое значение. Это значение, которое вы сравниваете со списком условий. (например, condition_1, condition_2, … condition_n)
condition_1, … condition_n
Условия, которые оцениваются в указанном порядке. Как только condition окажется истинным, выполнится соответствующий код и conditions больше не будтут оцениваться.
result_1, … result_n
Код, который выполняется, когда condition оказывается истинным.

Возвращаемое значение

Оператор CASE выполняет соответствующий код для первого условия, которое оказывается True.
Если ни одно из условий не выполнено, то будет выполнено предложение Else в операторе CASE. Предложение Else не является обязательным.
Если предложение Else опущено и ни одно условие не выполняется, то оператор CASE ничего не сделает.

Применение

  • Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000

Тип функции

  • Функция VBA

Пример (как функция VBA)

Оператор CASE может использоваться только в коде VBA в Microsoft Excel.
Рассмотрим несколько примеров функции оператора CASE, чтобы понять, как использовать оператор CASE в коде Excel VBA:

Select Case LRegion

  Case «С»

   LRegion = «Север»

  Case «Ю»

   LRegion = «Юг»

  Case «В»

   LRegion = «Восток»

  Case «З»

   LRegion = «Запад»

  End Select

С помощью оператора Excel CASE вы также можете использовать ключевое слово To, чтобы указать диапазон значений.
Например:

Select Case LNumber

  Case 1 To 10

   LRegion = «Север»

  Case 11 To 20

   LRegion = «Юг»

  Case 21 To 30

   LRegion = «Восток»

  Case Else

   LRegion = «Запад»

  End Select

С помощью оператора Excel CASE вы также можете разделять значения запятыми.
Например:

Select Case LNumber

  Case 1, 2

   LRegion = «Север»

  Case 3, 4, 5

   LRegion = «Юг»

  Case 6

   LRegion = «Восток»

  Case 7, 11

   LRegion = «Запад»

  End Select

И, наконец, с помощью оператора Excel CASE вы также можете использовать ключевое слово Is для сравнения значений.
Например:

Select Case LNumber

  Case Is<100

   LRegion = «Север»

  Case Is<200

   LRegion = «Юг»

  Case Is<300

   LRegion = «Восток»

  Case Else

   LRegion = «Запад»

  End Select

Key Points

  • With SELECT CASE, you can test multiple conditions, especially when you are working on more than two.
  • The code you write with SELECT CASE is way more structured than standard conditional code.
  • It is easier to modify it when you need to adjust one or more of the values in the code.

What is VBA Select Case

VBA SELECT CASE is a statement to test multiple conditions. In this statement, you can specify one condition and then specify a code to execute if that condition is true and then specify a second condition and a code to run if that condition is true. In this way, you can specify multiple conditions and multiple statements.

The syntax for select case

Below is the syntax that you need to follow to write a select case statement.

Select Case Test Expression

	Case (Condition to Test)
	Statement1 [Line of Code to Run if CASE 1 is TRUE]

	Case (Condition to Test)
	Statement1 [Line of Code to Run if CASE 2 is TRUE]

	Case Else
	Statement [Line of Code to Run if no CASE is TRUE]

End Select

In SELECT CASE syntax starts with the keyword “Select” and ends with “End Select”. To understand its syntax, we need to split it into four parts:

  • In the FIRST part, you need to specify the “Test Expression” on which all the conditions get tests.
  • After that, in the SECOND part, you need to specify the case to test (that means condition to test).
  • Now in the THIRD part, you need to write another case where you need to test if the condition in the second part is not TRUE.
  • In the end, in the FOURTH part, you need to specify an outcome that should come when both the above cases are not TRUE.

A simple example to understand a select case statement

The syntax of the SELECT CASE is self-explanatory and quite easy to follow while writing code. But let’s take an example and understand it completely. Below you have a simple code to test the value from cell A1.

Sub SelectCaseExample1()

    Select Case Range("A1").Value

        Case "Yes"
            MsgBox "It's a Yes."

        Case "No"
            MsgBox "It's a No"

        Case Else
            MsgBox "Can't Say"  
      
    End Select

End Sub

Now let’s understand this code with each line:

  • FIRST, you have the SELECT CASE keyword and the cell A1 to use as an expression for testing the condition.
  • SECOND, you have the keyword CASE and the condition (“YES”) to check from cell A1 and code to show a message box with the message “It’s a Yes” if the condition mentioned in the case1 is true.
  • THIRD, you again have the keyword case and the condition (“No”) to check from cell A1 and code to show a message box with the message “It’s a No” if the condition mentioned in case two is true.
  • FOURTH, you have the keyword CASE ELSE and a line of code to show a message box with a message “Can’t Say” if none of the cases are true.
  • FIFTH, you have the END SELECT keyword to end the SELECT CASE statement.

Related: VBA MESSAGE BOX

Important Points

  • It can test multiple conditions and execute a line of code based on the result.
  • You can use comparison operators (=, >, <, <>, >=, <=) while testing for a condition by using the Is keyword.
  • You can use a comma to test more than one condition within a single case.
  • You can also use a range of numbers while testing a condition in a single case.
  • When one condition is met, VBA stops to test the rest of the cases from the statement.
  • You can also add a case else section at the end to execute a line of code when none of the conditions are met.
  • You can skip using the CASE END statement.

More Examples to use Select Case

It’s time to use the SELECT CASE in different ways, and below are some of the useful and essential examples that you can learn.

100 Excel Macro Examples

1. Select Case with Numbers

While writing a VBA code for the SELECT CASE statement, you can use operators to compare values. Now in the below code, you have >,<, and = operators to test the conditions.

Sub SelectCaseExample1()

    Select Case Range("A1").Value

        Case Is >= 45
            MsgBox "Pass"    

        Case Is < 45
            MsgBox "Fail"    
   
    End Select

End Sub    
  • The first case in this statement checks if the value from cell A1 is greater than or equal to 45 or not and returns a message box with the message “Pass”.
  • And the second case in the statement checks if the value from cell A1 is lower than 45 and returns a message box with the message “Fail”. 

2. Select Case with a Range of Numbers

You can also use a range of numbers to test a condition. In the below code, you have a condition with a range of numbers in each case to test.

Sub SelectCaseExample2()

    Select Case Range(“A1”).Value

        Case 45 To 100
            MsgBox “Pass”    
    
        Case 0 To 44
            MsgBox “Fail”       

        Case Else
            MsgBox “Out of Range”           

    End Select   

End Sub
  • The first case in the statement checks the number from cell A1 using the range of numbers from 45 to 100 and returns the “Pass” if the value falls under this range.
  • The second statement has a range of 0 to 44 to test with the value from cell A1 and returns “Fail” if the value falls under this range.
  • The third statement is case else show a message box with the message “Out of Range” if cases one and two are false.

3. Using the Colon Operator

While writing code for the SELECT CASE, you can use colon operators to write the entire case in one line.

In the below code, the line starts with the case and then the condition to test and then a colon, and then the statement to run in that case is true.

Sub SelectCaseExample3()

    Select Case Range(“A1”).Value   

        Case 45 To 100: MsgBox “Pass”           

        Case 0 To 44: MsgBox “Fail”           

        Case Else: MsgBox “Out of Range”           

    End Select   

End Sub

4. Use Select Case with Multiple Conditions

Just like defining a range for a case, you can also specify multiple values to test for the condition. In the below code, each case has three numbers to test.

Sub SelectCaseExample()

    Select Case Range("A1").Value

        Case 1, 3, 5
            MsgBox "Yes"
            
        Case 2, 4, 6
            MsgBox "No"
            
        Case Else
            MsgBox "Out of range"
            
    End Select
        
End Sub
  • The first case of this code will test the value from the cell if it is 1, 3, or 5 and will return “Yes” in a message box.
  • And the second case of this code will test the value from cell A1 if it’s 2, 4, or 6.

5. Using Select Case in a Custom Function

You can also use the SELECT CASE while writing code for a VBA Function.

Function udfGrade(student_marks As Integer)

Dim myGrade As String

Select Case student_marks

    Case Is < 40: myGrade = “Bad”

    Case 41 To 50: myGrade = “Average”

    Case 51 To 60: myGrade = “Good”

    Case 61 To 80: myGrade = “Very Good”   

    Case 81 To 100: myGrade = “Excellent”

End Select

udfGrade = myGrade

End Function

In the above function, it has five cases to check for the score of the students from a cell. All 5 cases use a range of numbers and return the value defined in the statement.

6. Using Select Case from Nested Conditions

You can also create a nested condition statement. What I’m trying to say is you can write a code to test multiple conditions with the select case.

Imagine if you want to write a code that can test conditions based on the values from two different cells.

Sub SelectCaseStatement()

    Select Case Range("A2")
    
        Case "Boy"
        
            Select Case Range("B2")
                Case "Commerce": MsgBox "Boy (Commerce)"
                Case "Science": MsgBox "Boy (Science)"
            End Select
            
        Case "Girl"
        
            Select Case Range("B2")
                Case "Commerce": MsgBox "Girl (Commerce)"
                Case "Science": MsgBox "Girl (Science)"
            End Select
            
    End Select
    
End Sub

In the above code, you have three select case statements. There is one main statement that checks for the value from the cell A2 if it is “Boy” or “Girl”.

And then, based on the result, two more statements run and check for the value from cell B2 if it is Commerce or Science.

SELECT CASE Vs. IF THEN ELSE Statement

  • When you want to test multiple conditions, it’s easy to write a code using the SELECT CASE instead of IF-THEN.
  • Even it is easy to edit and make changes in a SELECT CASE statement compared to IF-THEN.

Like this post? Please share to your friends:
  • Select all visible cells in excel
  • Select case with if vba excel
  • Select all values in a column excel
  • Select case vba excel примеры
  • Select all titles in word