VBA Select Case Statement

У VBA, Виберіть Заяву про випадок є альтернативою Заява If-Then, що дозволяє перевірити, чи виконуються умови, запускаючи певний код для кожної умови. Оператор Select є кращим, ніж оператор If, якщо є кілька умов для обробки.

Виберіть Приклад випадку

У цьому прикладі пропонується користувачу YesNoCancel MessageBox і перевіряється, яку опцію користувач вибрав:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult Як VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Виберіть Case nResultВипадок vbТакПовідомлення "Так"Справа vbNoПовідомлення "Ні"Корпус vbCancelПовідомлення "Скасувати"Кінець ВиберітьEnd Sub

Нижче ми виписали еквівалент, використовуючи замість цього оператор If. Ви помітите, що Заява про вибір випадку передбачає дещо менше набору тексту - ця перевага посилюється при тестуванні кількох критеріїв.

12345678910111213 Sub Якщо_Так_Ні_Скасувати ()Dim nResult Як VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Якщо nResult = vbТакПовідомлення "Так"В іншому випадку, якщо nResult = vbNo ТодіПовідомлення "Ні"В іншому випадку якщо nResult = vbCancel ТодіПовідомлення "Скасувати"Закінчити ЯкщоEnd Sub

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

Синтаксис Select Case Statement виглядає наступним чином:

12345678910 Виберіть регістр [Тестовий вираз]Випадок [умова 1][Дія, якщо умова 1 істинна]Випадок [умова 2][Дія, якщо умова 2 відповідає дійсності]Випадок [умова n][Дія, якщо умова n істинна]Справа в іншому[Дія, якщо жодна з них не відповідає дійсності]Кінець Виберіть

Де:

[Тестовий вираз] - Це цінність для оцінки. Зазвичай це змінна.

[Дія, якщо умова n істинна] - Це лише код для запуску, якщо умова виконується (так само, як і для оператора If)

[Умова n] - Це умова для тестування. Існує багато різних способів перевірки умов. Ми обговоримо їх нижче.

Оператор Case виконає код для ПЕРШОЇ умови, яка буде визнана як TRUE. Якщо жодна умова не виконується, код не буде виконано, якщо не додано пропозицію Else.

Виберіть критерії випадку

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

Точна відповідність - числа

Ви можете легко перевірити точну відповідність за допомогою заяви про випадок:

1 Випадок 10

або додайте коми, щоб перевірити точні збіги з кількома числами:

1 Справа 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n як ціле числоn = CInt (InputBox ("…"))Виберіть Випадок nВипадок 10'Якщо n дорівнює 10, тоСправа 20, 30, 40'Якщо n 20/30/40 ТодіСправа в іншому'Якщо n не 10/20/30/40 ТодіКінець ВиберітьEnd Sub

Діапазони

Ви можете перевірити, чи потрапляє число в такий діапазон:

1 Справа 55 до 74

Ця процедура генерує літерний бал для студента на основі його числового балу:

12345678910111213141516171819202122 Sub Calc_Grade ()Оцінити як ціле числоЗатемнити LetterGrade As StringОцінка = InputBox ("Введіть оцінку студента")Виберіть Оцінка випадкуСправа 90 до 100LetterGrade = "А"Справа 80 до 90LetterGrade = "B"Справа від 70 до 80LetterGrade = "C"Справа 60 до 70LetterGrade = "D"Справа в іншомуLetterGrade = "F"Кінець ВиберітьMsgBox "Студентська оцінка:" & LetterGradeEnd Sub

Ви також можете перевірити діапазони за допомогою Case Is

Виберіть "Справа є"

1234 Випадок <55'Нічого не робитиВипадок <= 74Повідомлення "В діапазоні"

Пам’ятайте, що оператор Case буде виконувати код ТІЛЬКИ за першу відповідність.

Ця процедура розраховує оцінку учня, використовуючи Case Is замість Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Оцінити як ціле числоЗатемнити LetterGrade As StringОцінка = InputBox ("Введіть оцінку студента")Виберіть Оцінка випадкуВипадок>> 90LetterGrade = "А"Випадок> = 80LetterGrade = "B"Випадок> = 70LetterGrade = "C"Випадок>> 60LetterGrade = "D"Справа в іншомуLetterGrade = "F"Кінець ВиберітьMsgBox "Студентська оцінка:" & LetterGradeEnd Sub

Справа в іншому

Ви можете додати "Справа в іншому" до кінця заяви про справу, щоб щось зробити, якщо не виконуються жодні умови:

1 Справа в іншому

Перегляньте кінець попереднього прикладу коду, щоб побачити, як можна використовувати Case Else.

Виберіть регістр - оператор "Текст і подібний"

Поки що наші приклади Select Case працювали лише з числами. Ви також можете використовувати оператори Select Case з текстом.

Точна відповідність - текст

Ви можете перевірити, чи вираз відповідає точній фразі, наприклад:

1 Футляр "Буряк"

Або скористайтеся комами, щоб перевірити, чи вираз точно відповідає кільком фразам:

1 Футляр "Яблуко", "Банан", "Апельсин"

Об’єднання виглядає так:

12345678910 Sub ExactMatch_Food ()Виберіть Діапазон регістрів ("a1"). ЗначенняФутляр "Буряк"Повідомлення "Овочевий"Футляр "Яблуко", "Банан", "Апельсин"Повідомлення "Фрукти"Кінець ВиберітьEnd Sub

Верхній і нижній регістр символів

За замовчуванням VBA є чутливим до регістру. Це означає, що VBA вважає "Текст" відмінним від "тексту". Щоб вимкнути чутливість до регістру, додайте опцію Порівняти текст у верхній частині модуля:

1 Опція Порівняти текст

Цей приклад зробить Вибір регістру нечутливим до регістру під час роботи з текстом:

123456789101112 Опція Порівняти текстSub ExactMatch_Food ()Виберіть Діапазон регістрів ("a1"). ЗначенняФутляр "Буряк"Повідомлення "Овочевий"Футляр "Яблуко", "Банан", "Апельсин"Повідомлення "Фрукти"Кінець ВиберітьEnd Sub

Випадок як

Оператор "Like" дозволяє робити неточні порівняння. Якщо текст збігається, Like повертає TRUE, якщо не відповідає, повертає FALSE. Це робить оператор Like простим у використанні з операторами If, однак це не так легко працюватиме з операторами Case.

Випадок як - невдалий тест

Наступний код демонструє, що оператор Like не працює з Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Неяскраве слово як рядокword = "КАКАО"Виберіть Речення відмінкаРядне слово 2 Як "*C*C*"Повідомлення "Добре"Справа в іншомуПовідомлення "Не добре"Кінець ВиберітьEnd Sub

Випадок як - правильний шлях

Однак ми можемо додати у вираз TRUE, щоб оператор Select працював з оператором Like:

1234567891011 Sub Select_Case_Like_CorrectWay ()Неяскраве слово як рядокword = "КАКАО"Виберіть Справа вірнаРечення, наприклад "*C*C*"Повідомлення "Добре"Справа в іншомуПовідомлення "Не добре"Кінець ВиберітьEnd Sub

Корпус - двокрапка

Використовуючи оператор Case, ви можете додати стільки рядків коду, скільки потрібно виконати з кожною умовою. Однак, якщо вам потрібно запустити лише один рядок коду. Ви можете використовувати двокрапку (:), щоб написати все в одному рядку.

Ось той самий приклад оцінки учнів, як і раніше, за винятком використання двокрапки для скорочення коду:

1234567891011121314151617 Sub Calc_Grade_colon ()Оцінити як ціле числоЗатемнити LetterGrade As StringОцінка = InputBox ("Введіть оцінку студента")Виберіть Оцінка випадкуВипадок 90 до 100: LetterGrade = "A"Випадок від 80 до 90: LetterGrade = "B"Випадок від 70 до 80: LetterGrade = "C"Справа від 60 до 70: LetterGrade = "D"Інший випадок: LetterGrade = "F"Кінець ВиберітьMsgBox "Студентська оцінка:" & LetterGradeEnd Sub

Вибір випадку - І / або - Кілька умов

Ви можете використовувати оператори «І» чи «Оператори» для перевірки додаткових критеріїв разом із варіантом вибору.

У цьому прикладі ми використовуємо Select Case зі змінною "вік", але ми також хочемо перевірити стать. Тому ми використовуємо оператор And для виконання більш складного тесту:

123456789101112131415161718 Sub NestedSelectCase ()Похмурий секс як струнаЗатемнити вік як ціле числостать = "чоловік" або жінкавік = 15Виберіть вік справиВипадок <20, а стать = "чоловічий"Повідомлення "Чоловік до 20 років"Випадок <20, а стать = "жінка"Повідомлення "Жінки до 20 років"Випадок>> 20 І стать = "чоловічий"Повідомлення "Чоловік старше 20 років"Випадок>> 20 І стать = "жінка"Повідомлення "Жінка старше 20 років"Кінець ВиберітьEnd Sub

Вкладені заяви про випадки

Так само, як і висловлювання If, ви можете вкласти оператори Case між собою:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Похмурий секс як струнаЗатемнити вік як ціле числостать = "чоловік" або жінкавік = 15Виберіть вік справиВипадок <20Виберіть Випадковий статьФутляр "чоловічий"Повідомлення "Чоловік до 20 років"Футляр "жіночий"MsgBox "Жінки до 20 років"Кінець ВиберітьВипадок>> 20 І стать = "жінка"Виберіть Випадкова статьФутляр "чоловічий"Повідомлення "Чоловік старше 20 років"Футляр "жіночий"MsgBox "Жінки старше 20"Кінець ВиберітьКінець ВиберітьEnd Sub

Заява про справу проти заяви про if

Чим більше умов для тестування, тим більш корисним випадок справи порівняно з твердженням if. Розглянемо приклад.

Ось код, необхідний для перевірки, чи дорівнює ім'я аркуша набору значень за допомогою оператора If:

12345 Якщо Name = "Бюджет" Або Name = "Прогноз" Або Name = "Закінчується12" Або _Name = "Flex" Or Name = "OtherRatios" Або Name = "Порівняння" Або _Name = "BudReview" Або Name = "P & L_Review" Або Name = "Інше" Тоді'Робити щосьЗакінчити Якщо

Ось той самий код, який використовує замість оператора Select:

12345 Виберіть назву справиВипадок "Бюджет", "Прогноз", "Остаточний12", "Гнучкий", "Інші співвідношення", _"Порівняння", "BudReview", "P & L_Review", "Інше"'Робити щосьКінець Виберіть

Ви можете побачити, що в цьому сценарії набагато простіше використовувати оператор Select. Це значно менше набору тексту, і його набагато легше читати.

Приклади вибору випадку VBA

Приклад 1. Функція, визначена користувачем (UDF)

Давайте повторимо наш наведений вище приклад розрахунку оцінок і створимо ОДС для розрахунку балів учня:

12345678910111213141516 Функція GetGrade (Оцінити як ціле число) як рядокВиберіть Оцінка випадкуСправа 90 до 100GetGrade = "А"Справа від 80 до 90GetGrade = "B"Справа від 70 до 80GetGrade = "C"Справа 60 до 70GetGrade = "D"Справа в іншомуGetGrade = "F"Кінець ВиберітьФункція завершення

Тепер ми можемо використовувати функцію GetGrade на нашому робочому аркуші Excel для швидкого розрахунку оцінок учнів:

Приклад 2. Назва тестового аркуша / випадок циклу справи

Цей код буде перебирати всі аркуші у книзі, аркуші UnProtecting, які відповідають певним критеріям:

123456789101112 Sub Case_UnProtectSheet ()Затемнити як робочий аркушДля кожного ws у робочих аркушахВиберіть Справа ws.Name 'Список усіх аркушів зі співвідношеннямиВипадок "Бюджет", "Прогноз", "Остаточний12", "Гнучкий", "Інші співвідношення", _"Порівняння", "BudReview", "P & L_Review", "Інше"ws.UnprotectКінець ВиберітьНаступний wsEnd Sub

Приклад 3. Виберіть регістр - значення комірки

У цьому прикладі перевірятимуть оцінку студента в клітинці, виводячи буквену оцінку безпосередньо в клітинку праворуч.

12345678910111213141516 Sub TestCellValue ()Яскрава клітинка як діапазонВстановити клітинку = Діапазон ("C1")Виберіть Ячейка регіструСправа 90 до 100cell.Offset (0, 1) = "A"Справа 80 до 90cell.Offset (0, 1) = "B"Справа від 70 до 80cell.Offset (0, 1) = "C"Справа 60 до 80cell.Offset (0, 1) = "D"Кінець ВиберітьEnd Sub

Приклад 4. Виберіть Справа - Дати

Цей приклад вибору випадку - це функція, яка перевіряє, на який квартал дати припадає.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("20.07.2019"))End SubФункція GetQuarter (dt як дата) як ціле числоDim sht як робочий аркушВиберіть Case dtСправа CDate ("01.01.2019") До CDate ("31.03.2019")GetQuarter = 1Справа CDate ("04/01/2019") До CDate ("30/06/2019")GetQuarter = 2Справа CDate ("07/01/2019") До CDate ("30/09/2019")GetQuarter = 3Справа CDate ("01.10.2019") До CDate ("31.12.2019")GetQuarter = 4Кінець ВиберітьФункція завершення

Оскільки це функція, ви можете використовувати її як функцію всередині Excel:

Напр. 5 Перевірте, чи є число непарним чи парним

У цьому прикладі перевіряється, чи є число непарним або парним.

123456789101112 Sub CheckOddEven ()Dim n як ціле числоn = InputBox ("Введіть число")Виберіть Case n Mod 2Випадок 0MsgBox "Число парне."Випадок 1MsgBox "Число непарне."Кінець ВиберітьEnd Sub

Напр. 6 Перевірте, чи дата вказана у будні чи вихідні

Ці приклади перевірять, чи дата припадає на будні чи вихідні.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt As Datedt = CDate ("1/1/2020")Вибрати день будня (дт)Випадок vbпонеділокПовідомлення "Сьогодні понеділок"Справа vbВторникПовідомлення "Сьогодні вівторок"Випадок vbСредаПовідомлення "Сьогодні середа"Справа vbЧетверПовідомлення "Сьогодні четвер"Випадок vbП'ятницяПовідомлення "Сьогодні п'ятниця"Випадок vbСуботаПовідомлення "Сьогодні субота"Випадок vbнеділяПовідомлення "Сьогодні неділя"Кінець ВиберітьEnd Sub
123456789101112 Sub CheckWeekend ()Dim dt As Datedt = CDate ("1/1/2020")Вибір випадку будня (дт)Справа vbСубота, vbНеділяMsgBox "Це вихідні"Справа в іншомуMsgBox "Це не вихідні"Кінець ВиберітьEnd Sub

Служба вибору VBA у програмі Access

Усі наведені вище приклади працюють точно так само в Access VBA, як і в Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs як база данихЗатемнити спочатку як RecordSetВстановити dbs = CurrentDBВстановити rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)З першим.Перейти спочатку.РедагуватиВиберіть Case rst.Fields ("Місто")Корпус "Остін".rst.Fields ("TelCode") = "512"Корпус "Чикаго".rst.Fields ("TelCode") = "312"Справа "Нью -Йорк".rst.Fields ("TelCode") = "1212"Корпус "Сан -Франциско".rst.Fields ("TelCode") = "415"Кінець Виберіть.ОновитиЗакінчити зКінець Сус
wave wave wave wave wave