- Виберіть Приклад випадку
- Синтаксис оператора справи
- Виберіть критерії випадку
- Виберіть регістр - оператор "Текст і подібний"
- Корпус - двокрапка
- Вибір випадку - І / або - Кілька умов
- Вкладені заяви про випадки
- Заява про справу проти заяви про if
- Приклади вибору випадку VBA
- Служба вибору VBA у програмі Access
У 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"Кінець Виберіть.ОновитиЗакінчити зКінець Сус |