Vba условные операторы select case. «VBA Управляющие структуры VBA. If. Then, If. Then. Else, Select Case. Операторы цикла. Вложенные циклы

Пример оператора Select Case

Здесь явно не помешает пример, показывающий, как в действительности может выглядеть структура Select Case.

Select Case objRol l OfFi l m.Type

Case "Слайдовая"

intСлайдовые = intСлайдовые + 1

Case "Цветная негативная"

intЦветныеНегативные = intЦветныеНегативные + 1

Case "ЧБ негативная"

intЧБнегативные = intЧБнегативные + 1

MgaBox "Неизвестный тип пленки."

В основном этот фрагмент программного кода делает то же, что и приведенный выше программный код для примера из раздела об операторах If. . .ElseIf (опущена только проверка срока хранения). Правда, с тех пор наш гипотетический объект, представляющий ролик пленки, похоже, был немного модифицирован - информация о цветностибесцветности пленки теперь тоже представляется свойством Туре, а не отдельным свойством Color, как раньше.

А если дело обстоит таким образом, то программе приходится работать только с одним значением - со значением, возвращаемым свойством Туре. - но сравнивается это значение с несколькими из допустимых. Так что Select Case - это как раз то, что для нашего случая доктор прописал.

Первое применение оператора Case в данном примере эквивалентно применению If objRollOf Film.Type = "Слайдовая" Then, т.е. если свойство Туре объекта равно "Слайдовая", то программа выполняет следующий оператор, в противном случае она перейдет ко второму оператору Case.

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

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России

Из книги Компьютер + мобильник: эффективное взаимодействие автора Гольцман Виктор Иосифович

Отправка с сайта оператора На сегодняшний день уже, наверное, все операторы поддерживают отправку SMS со своего сайта. Сообщения, правда, можно отправить только абонентам данного оператора, но этого, как правило, бывает достаточно.Итак, к практике. Сейчас мы рассмотрим

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Пример: очереди сообщений Posix и функция select Дескриптор очереди сообщений (переменная типа mqd_t) не является «обычным» дескриптором и не может использоваться с функциями select и poll (глава 6 ). Тем не менее их можно использовать вместе с каналом и функцией mq_notify. (Аналогичный

Из книги VBA для чайников автора Каммингс Стив

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Проверка условий в операторах Select Case Структура Select Case не использует явным образом полные условные выражения, подобные тем, о которых шла речь выше (см. раздел "Курс на использование условных выражений"). Вы должны разбить каждое условие на две части, представленные как

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Из книги C++ для начинающих автора Липпман Стенли

Пример 10-24. Использование case #!/bin/bashecho; echo "Нажмите клавишу и затем клавишу Return."read Keypresscase "$Keypress" in ) echo "буква в нижнем регистре";; ) echo "Буква в верхнем регистре";; ) echo "Цифра";; *) echo "Знак пунктуации, пробел или что-то другое";;esac # Допускается указыватль

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Пример 10-25. Создание меню с помощью case #!/bin/bash# Грубый пример базы данныхclear # Очистка экранаecho " Список"echo " ------"echo "Выберите интересующую Вас персону:"echoecho "[E]vans, Roland"echo "[J]ones, Mildred"echo "[S]mith, Julie"echo "[Z]ane, Morris"echoread personcase "$person" in# Обратите внимание: переменная взята в кавычки.

Из книги автора

Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной #!/bin/bash# Подстановка команд в "case".case $(arch) in # команда "arch" возвращает строку, описывающую аппаратную апхитектуру.i386) echo "Машина на базе процессора 80386";;i486) echo "Машина на базе

Из книги автора

Пример A-18. Генерация простых чисел, с использованием оператора деления по модулю (остаток от деления) #!/bin/bash# primes.sh: Генерация простых чисел, без использования массивов.# Автор: Stephane Chazelas.# Этот сценарий не использует класический алгоритм "Решето Эратосфена",#+ вместо него

Из книги автора

РАСШИРЕНИЕ ОПЕРАТОРА if С ПОМОЩЬЮ else Простейшей формой оператора if является та, которой мы только что воспользовались: if(выражение)оператор Обычно под выражением здесь понимают условное выражение, с его помощью сравниваются значения двух величин (например x > y

Из книги автора

18.8.2. Прекращение выполнения оператора case Рассмотрим следующий пример. В сценарии выполняется бесконечный цикл до тех пор, пока пользователь не введет число, большее 5. Для прерывания цикла и возврата в командную строку интерпретатора используется команда break.$ pg

Из книги автора

Из книги автора

Простой пример использования функции select Теперь мы переделаем код нашего получателя внеполосных данных и вместо сигнала SIGURG будем использовать функцию select. В листинге 24.3 показана принимающая программа.Листинг 24.3. Принимающая программа, в которой (ошибочно)

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

Select Case выражение ] ... ] End Select

Параметры
выражение
Обязательный. Любое числовое выражение или строковое выражение.
списокВыражений-n
Обязательный при наличии предложения Case . Список с разделителями, состоящий из одной или нескольких форм следующего вида: выражение, выражение To выражение, Is операторСравнения выражение. Ключевое слово To задает диапазон значений. При использовании ключевого слова To перед ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения (кроме Is и Like) задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по умолчанию.
инструкции-n
Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка списокВыражений-n.
инструкции_else
Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает не совпадает ни с одним из предложений Case .

Замечания
Если выражение совпадает с любым выражением из спискаВыражений в предложении Case , выполняются все инструкции, следующие за данным предложением Case до следующего предложения Case , или, для последнего предложения, до инструкции End Select . Затем управление передается инструкции, следующей за End Select . Если выражение совпадает с выражениями из списка в нескольких предложениях Case , выполняется только первый подходящий набор инструкций.
Предложение Case Else задает список инструкции_else, которые будут выполнены, если не обнаружено ни одно совпадение выражения и компонента списокВыражений ни в одном из остальных предложений Case. Хотя данное предложение не является обязательным, рекомендуется помещать предложение Case Else в блок Select Case , чтобы предусмотреть неожиданные значения выражения. Если ни в одном предложении Case списокВыражений не содержит компонента, отвечающего аргументу выражение, и отсутствует инструкция Case Else , выполнение продолжается с инструкции, следующей за инструкцией End Select .
В каждом предложении Case допускается использование нескольких выражений или диапазонов. Например допустима следующая строка:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber Следует отличать оператор сравнения Is от ключевого слова Is , используемого в инструкции Select Case .
Имеется также возможность задать диапазоны или несколько выражений для строковых значений. В следующем примере предложение Case выполняется для строк, которые точно совпадают со строкой "все", для строк, лежащих в алфавитном порядке между "орехи" и "яблоки", и для строк со значением, равных текущему значению переменной TestItem :
Case "все", "орехи" To "яблоки", TestItem Допускаются вложенные инструкции Select Case . Каждой вложенной инструкции Select Case должна соответствовать инструкция End Select .

Пример
В данном примере инструкция Select Case используется для анализа значения переменной. Второе предложение Case содержит значение анализируемой переменной и следовательно выполняется только инструкция, связанная с этим предложением.

Dim Number Number = 8 " Инициализирует переменную. Select Case Number " Анализирует число. Case 1 To 5 " Число между 1 и 5. Debug.Print "Между 1 и 5" " Это предложение Case является единственным истинным. Case 6, 7, 8 " Число между 6 и 8. Debug.Print "Между 6 и 8" Case Is > 8 And Number < 11 " 9 или 10. Debug.Print "Больше 8" Case Else " Другие значения. Debug.Print "Вне интервала 1 -- 10" End Select

And in today’s post we will discuss about VBA select case statement. VBA Select Case can be used instead of complex Excel Nested If statements. This makes the VBA code faster to execute and easier to understand.

Select-Case statement (also called as Switch Case in some languages) checks a variable or an expression for different cases (values). If anyone of the case becomes true then only that case is executed and the program ignores all other cases.

If you remember in our last post we talked about, “how you can ”.

Syntax of VBA Select Case Statement:

The Syntax is as under:

Select Case Condition
Case value_1
Code to Execute When Condition = value_1
Case value_2
Code to Execute When Condition = value_2
Case value_3
Code to Execute When Condition = value_3
Case Else
Code to Execute When all the other cases are False
End Select

Here, ‘Condition ’ refers to the variable or the expression that is to be tested and based on which anyone of the code segments will be executed.

‘value_1 ’, ‘value_2 ’ and ‘value_3 ’ are the possible outcomes of the ‘Condition’. Whenever anyone of these values matches the ‘Condition’ then its corresponding Case block will execute.

‘Else’ is a kind of default case value, which will only execute when all the above Case statements result into False. ‘Else’ case is optional but generally it is considered a good practice to use it.

Examples of Select-Case in VBA:

Now let’s move on to some practical examples of case Statements.

Example 1: Select Case Statement with an Expression.

In the below example, we have supplied a condition (i.e. a=b) to the Select Case statement. If this is True then ‘Case True’ block will be executed and if it is False then ‘Case False’ block will execute.

Sub Select_Case_Example() "Enter the value for variables a = InputBox("Enter the value for A:") b = InputBox("Enter the value for B:") " Evaluating the expression Select Case a = b Case True MsgBox "The expression is TRUE" Case False MsgBox "The expressions is FALSE" End Select End Sub

Note: In this code is used for getting values from user.

Example 2: Case statement to check Text Strings

In this example we will compare text strings in the Case statements. If a match is found then the corresponding case block will execute otherwise the ‘Case Else’ block will execute.

Sub Select_Case_Example() "Enter the value for variables fruit_name = InputBox("Enter the fruit name:") " Evaluating the expression Select Case fruit_name Case "Apple" MsgBox "You entered Apple" Case "Mango" MsgBox "You entered Mango" Case "Orange" MsgBox "You entered Orange" Case Else MsgBox "I didn"t knew this fruit!" End Select End Sub

Example 3: Case statement to check numbers

In the below example we will check if the number entered by user is less than or greater than 5.

Sub Select_Case_Example() "Enter the value for variables Num = InputBox("Enter any Number between 1 to 10:") " Evaluating the expression Select Case Num Case Is < 5 MsgBox "Your Number is less than 5" Case Is = 5 MsgBox "Your Number is Equal to 5" Case Is > 5 MsgBox "Your Number is greater than 5" End Select End Sub

Note: You can use IS keyword with Case Statement to compare values.

Example 4: Select Case statement to check multiple conditions inside a single case.

In this example we will ask the user to enter any number from 1-10. And then we will check if the number is even or odd by using multiple conditions in the case statement. Notice here I have used a “,” (comma) to compare multiple conditions in a single case.

Sub Select_Case_Example() "Enter the value for variables Num = InputBox("Enter any Number between 1 to 10:") " Evaluating the expression Select Case Num Case 2, 4, 6, 8, 10 MsgBox "Your Number is Even." Case 1, 3, 5, 7, 9 MsgBox "Your Number is Odd." Case Else MsgBox "Your Number is out of the range." End Select End Sub

Note: I know that there are easier methods to check if a number is even or odd, but I have used this example only for explaining how you can check multiple conditions inside a single case statement.

Example 5: Case statement to check a continuous range as condition.

Here we will test a continuous range as a condition. We will ask the user to enter any number between 1-10, if the number is between 1 to 5 (including both 1 and 5) then ‘Case 1 To 5’ will be ‘True’, if the number entered by the user is between 6 and 10 (including both 6 and 10) then ‘Case 6 To 10’ will be ‘True’, if both the previous cases are ‘False’ then ‘Case Else’ will be executed.

Sub Select_Case_Example() "Enter the value for variables Num = InputBox("Enter any Number between 1 to 10:") " Evaluating the expression Select Case Num Case 1 To 5 MsgBox "Your Number between 1 to 5" Case 6 To 10 MsgBox "Your Number between 6 to 10" Case Else MsgBox "Your Number is out of the range." End Select End Sub

So, this was all about VBA Select Case Statement. Feel free to share your thoughts about this topic.

About Ankit Kaul

Ankit is the founder of Excel Trick. He is tech Geek who loves to sit in front of his square headed girlfriend (his PC) all day long. :D. Ankit has a strong passion for learning Microsoft Excel. His only aim is to turn you guys into "Excel Geeks".

В реальных программах зачастую бывает необходимо выполнять более сложный выбор в процедурах, выбирая между тремя и более ветвями. В этом случае можно помещать операторы If..Then..Else друг в друга. Это называется вложением операторов.

Вышепоказанная процедура использует несколько вложенных друг в друга операторов условного перехода. Следует сказать, что такая процедура будет работать только в Excel, т.к. использует метод Application.InputBox (см. Функции host-приложений). Этот метод не дает пользователю во время работы функции ввести что-либо, кроме числа.

Если пользователь вводит не число, то получает об этом сообщение.



Если пользователь ничего не вводит, то получает сведение об ошибке.




Если пользователь воспользуется кнопкой "Отмена", то получает сообщение "Не введены данные".


VBA предоставляет сокращенную версию оператора If..Then..Else , являющуюся сжатым эквивалентом вложенных операторв If..Then..Else , использованных в листинге. Такой краткой формой является операторIf..Then..ElseIf



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


Для выполнения выбора из нескольких возможных ветвей кода можно вкладывать операторы If..Then..Else на много уровней вглубь, но уследить за ходом выполнения ветвей становится все труднее и труднее.

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

Ключевые слова Select Case используются со многими операторами Case, где каждый оператор Case проверяет появление другого условия и выполняется только одна из ветвей Case. Ветвь Case может содержать один, несколько или ни одного оператора VBA.


Оператор безусловного перехода

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

Оператор безусловного перехода всегда изменяет порядок выполнения операторов в процедуре или функции. При этом не проверяется никаких условий.


Синтаксис:

GoTo line


line - любая допустимая метка или номер строки в той же процедуре или функции, которая содержит оператор GoTo.

Условия являются очень полезными при программировании, поскольку позволяют нам выполнять действия, в зависимости от установленных критериев (используется такой же принцип как и в IF функции Excel).

Наиболее важной функцией, которая задает условие является IF и сейчас мы посмотрим, как она работает:

If [УСЛОВИЕ ЗДЕСЬ] Then "=> ЕСЛИ условие верно, ТОГДА "Инструкции, если "правда" Else "=> В ПРОТИВНОМ СЛУЧАЕ "Инструкции, если "ложь" End If

Давайте перейдем к практике и вернемся к примеру, который мы использовали в уроке с переменными. Цель этой процедуры была в том, чтобы открыть диалоговое окно, которое бы содержало значение из строки, указанного в ячейке F5 :

Если вы введете букву в ячейку F5 , это повлечет ошибку. Мы хотим предотвратить это.

Sub variables () "Декларирование переменных Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Присвоение значений переменным row_number = Range("F5") + 1 last_name = Cells(row_number, 1) first_name = Cells(row_number, 2) age = Cells(row_number, 3) "Диалоговое окно MsgBox last_name & " " & first_name & "," & age & " лет" End Sub

Давайте добавим условие, которое будет проверять - является ли введенное значение в ячейку F5 числом, перед тем, как код будет выполнен.

Мы воспользуемся функцией IsNumeric для проверки условия:

Sub variables () "Если значение в скобках (ячейка F5) является числовым (И ПОЭТОМУ УСЛОВИЕ IF ЕСТЬ ВЕРНЫМ) тогда "выполнить инструкции, которые следуют после THEN If IsNumeric (Range ("F5")) Then "Декларирование переменных Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Присвоение значений переменным row_number = Range ("F5") + 1 last_name = Cells (row_number, 1) first_name = Cells (row_number, 2) age = Cells (row_number, 3) "Диалоговое окно MsgBox last_name & " " & first_name & "," & age & " лет" End If End Sub

Нам также нужно прописать инструкции, если поставленное нами условие не выполнится:

Sub variables () If IsNumeric (Range ("F5")) Then "Если условие выполняется "Декларирование переменных Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Присвоение значений переменным row_number = Range ("F5") + 1 last_name = Cells (row_number, 1) first_name = Cells (row_number, 2) age = Cells (row_number, 3) "Диалоговое окно MsgBox last_name & " " & first_name & "," & age & " лет" Else "Если условие не выполняется "Диалоговое окно: предупреждение MsgBox "Введенное значение " & Range ("F5") & " не является верным!" "Удаление содержимого ячейки F5 Range ("F5").ClearContents End If End Sub

Теперь нечисловое значения не повлечет никаких проблем.

Работая с нашим массивом, который содержит 16 строк данных, наш следующий шаг будет в проверке является ли переменная row_number: "больше чем или равно 2" и "меньше чем или равно 17".

Но сначала взглянем на операторы сравнения:

и эти полезные операторы:

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

Sub variables () If IsNumeric (Range ("F5")) Then "Если числовое значение Dim last_name As String, first_name As String, age As Integer, row_number As Integer row_number = Range ("F5") + 1 If row_number> = 2 And row_number

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

Для того, чтобы сделать это, мы должны создать переменную nb_rows и добавить эту функцию.

В этом случае, мы используем функцию WorksheetFunction.CountA , которая является аналогом функции COUNTA в самом Excel.

Мы хотим, чтобы эта функция подсчитала количество непустых ячеек в первой колонке по записала полученное значение в переменную nb_rows :

Sub variables () If IsNumeric (Range ("F5")) Then "ЕСЛИ ЧИСЛО Dim last_name As String, first_name As String, age As Integer, row_number As Integer Dim nb_rows As Integer row_number = Range ("F5") + 1 nb_rows = WorksheetFunction.CountA (Range ("A:A")) "Функция подсчета количества строк If row_number > = 2 And row_number

ElseIf

ElseIf дает возможность добавлять дополнительные условия после IF команды:

If [УСЛОВИЕ 1] Then "=> ЕСЛИ условие 1 верно, ТОГДА "Инструкции 1 ElseIf [УСЛОВИЕ 2] Then "=> ЕСЛИ условие 1 неверно, но условие 2 верно, ТОГДА "Инструкции 2 Else "=> ИНАЧЕ "Инструкции 3 End If

Если УСЛОВИЕ 1 выполняется, Инструкция 1 будет выполнена и покинет оператор IF (который начинается с IF и заканчивается End If). Если УСЛОВИЕ 2 принимает значение " ложь ", тогда будет выполнена Инструкция 2 , и если она в свою очередь возвращает " ложь ", тогда Инструкция 3 (под Else ) будет выполнена.

Sub scores_comment () "Переменные Dim note As Integer, score_comment As String note = Range ("A1") "Комментарии, основанные на полученной оценке If note = 6 Then score_comment = "Великолепный бал!" ElseIf note = 5 Then score_comment = "Хороший бал" ElseIf note = 4 Then score_comment = "Удовлетворительный бал" ElseIf note = 3 Then score_comment = "Неудовлетворительный бал" ElseIf note = 2 Then score_comment = "Плохой бал" ElseIf note = 1 Then score_comment = "Ужасный бал" Else score_comment = "Нулевой бал" End If "Комментарий в ячейке B1 Range ("B1") = score_comment End Sub

Select

Существует альтернатива использованию If со многими ElseIf инструкциями, а именно команда Select , которая больше подходит к такого рода ситуаций.

Рассмотрим пример макроса с оператором Select :

Sub scores_comment () "Переменные Dim note As Integer , score_comment As String note = Range ("A1") "Комментарии, основанные на полученной оценке Select Case note "

Стоит отметить, что мы также могли использовать и другие операторы сравнения:

Case Is > = 6 "если значение> = 6

Примеры с различными значениями:

Case Is = 6, 7 "если значение = 6 или 7 Case Is 6, 7 "если значение не равно 6 или 7 Case 6 To 10 "если значение = любому числу от 6 до 10

Понравилась статья? Поделиться с друзьями: