Заявление о выборе регистра VBA

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

Выберите пример случая

В этом примере пользователю предлагается ввести YesNoCancel MessageBox и проверяется, какой вариант выбрал пользователь:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult как VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Выберите Case nResultСлучай vbДаMsgBox "Да"Дело vbNoMsgBox "Нет"Случай vbCancelMsgBox "Отмена"Конец ВыбратьКонец подписки

Ниже мы выписали эквивалент, используя вместо этого оператор If. Вы заметите, что инструкция Case Select включает в себя немного меньше набора текста - это преимущество усиливается при тестировании нескольких критериев.

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult как VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Если nResult = vbYes ТогдаMsgBox "Да"ElseIf nResult = vbNo ТогдаMsgBox "Нет"ElseIf nResult = vbCancel ТогдаMsgBox "Отмена"Конец, еслиКонец подписки

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

Синтаксис оператора Select Case выглядит следующим образом:

12345678910 Выберите вариант [Тестовое выражение]Дело [Условие 1][Действие, если выполняется условие 1]Дело [Условие 2][Действие, если выполняется условие 2]Дело [Условие n][Действие, если условие n выполнено]Case Else[Действие, если ни одно из них не соответствует действительности]Конец Выбрать

Где:

[Тестовое выражение] - Значение для оценки. Обычно это переменная.

[Действие, если условие n выполнено] - Это просто код для запуска, если условие выполнено (как в случае с оператором If)

[Условие n] - Это условие для проверки. Есть много разных способов проверить условия. Мы обсудим их ниже.

Оператор Case выполнит код для ПЕРВОГО условия, которое окажется ИСТИННЫМ. Если ни одно условие не выполнено, код не будет выполняться, если не будет добавлено предложение Else.

Выберите критерии обращения

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

Точное совпадение - числа

Вы можете легко проверить точное соответствие с помощью Case Statement:

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 ТогдаCase Else'Если n не 20/10/30/40 ТогдаКонец ВыбратьКонец подписки

Диапазоны

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

1 Дело 55-74

Эта процедура генерирует буквенную оценку для студента на основе его числовой оценки:

12345678910111213141516171819202122 Sub Calc_Grade ()Тусклый счет как целое числоТусклая букваScore = InputBox ("Введите оценку учащегося")Выберите оценку случаяСлучай от 90 до 100LetterGrade = "А"Случай от 80 до 90LetterGrade = "B"Случай от 70 до 80LetterGrade = "C"Случай от 60 до 70LetterGrade = "D"Case ElseLetterGrade = "F"Конец ВыбратьMsgBox "Оценка учащегося:" и LetterGradeКонец подписки

Вы также можете тестировать диапазоны с помощью Case Is

Выберите Case Is

1234 Случай <55'Ничего не делатьСлучай <= 74MsgBox «В диапазоне»

Помните, что оператор Case выполняет код ТОЛЬКО для первого совпадения.

Эта процедура позволяет вычислить оценку учащегося с использованием Case Is вместо Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Тусклый счет как целое числоТусклая букваScore = InputBox ("Введите оценку учащегося")Выберите оценку случаяСлучай> = 90LetterGrade = "А"Случай> = 80LetterGrade = "B"Случай> = 70LetterGrade = "C"Случай> = 60LetterGrade = "D"Case ElseLetterGrade = "F"Конец ВыбратьMsgBox "Оценка учащегося:" и LetterGradeКонец подписки

Case Else

Вы можете добавить «Case Else» в конец описания Case, чтобы что-то предпринять, если не выполняются никакие условия:

1 Case Else

См. Конец предыдущего примера кода, чтобы увидеть, как можно использовать Case Else.

Выберите регистр - текст и оператор Like.

До сих пор наши примеры Select Case работали только с числами. Вы также можете использовать операторы Select Case с текстом.

Точное соответствие - текст

Вы можете проверить, соответствует ли выражение точной фразе, например:

1 Кейс "Свекла"

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

1 Чехол «Яблоко», «Банан», «Апельсин»

Собираем это так:

12345678910 Sub ExactMatch_Food ()Выберите диапазон регистра ("a1"). ЗначениеКейс "Свекла"MsgBox "Овощи"Чехол «Яблоко», «Банан», «Апельсин»MsgBox "Фрукты"Конец ВыбратьКонец подписки

Верхний и нижний регистр

По умолчанию VBA чувствителен к регистру. Это означает, что VBA считает «текст» отличным от «текста». Чтобы отключить чувствительность к регистру, добавьте Option Compare Text в верхнюю часть модуля:

1 Вариант Сравнить текст

В этом примере регистр Case Select будет учитываться при работе с текстом:

123456789101112 Вариант Сравнить текстSub ExactMatch_Food ()Выберите диапазон регистра ("a1"). ЗначениеКейс "Свекла"MsgBox "Овощи"Чехол «Яблоко», «Банан», «Апельсин»MsgBox "Фрукты"Конец ВыбратьКонец подписки

Случай как

Оператор Like позволяет проводить неточные сравнения. Если текст совпадает, Like возвращает TRUE, если не соответствует, возвращает FALSE. Это упрощает использование оператора Like с операторами If, но не так просто с операторами Case.

Случай как - неудачный тест

Следующий код демонстрирует, что оператор Like не работает с Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Тусклое слово как строкаword = "КАКАО"Выбрать слово в регистреРегистр word2 Как "* C * C *"MsgBox "Хорошо"Case ElseMsgBox "Не хорошо"Конец ВыбратьКонец подписки

Case Like - правильный путь

Однако мы можем добавить выражение ИСТИНА, чтобы оператор Select работал с оператором Like:

1234567891011 Sub Select_Case_Like_CorrectWay ()Тусклое слово как строкаword = "КАКАО"Выберите Case TrueСлово в регистре Как "* C * C *"MsgBox "Хорошо"Case ElseMsgBox "Не хорошо"Конец ВыбратьКонец подписки

Корпус - двоеточие

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

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

1234567891011121314151617 Sub Calc_Grade_colon ()Тусклый счет как целое числоТусклая букваScore = InputBox ("Введите оценку учащегося")Выберите оценку случаяРегистр от 90 до 100: LetterGrade = "A"Случай от 80 до 90: LetterGrade = "B"Случай от 70 до 80: LetterGrade = "C"Случай от 60 до 70: LetterGrade = "D"Иначе регистр: LetterGrade = "F"Конец ВыбратьMsgBox "Оценка учащегося:" и LetterGradeКонец подписки

Выбор случая - И / или - Несколько условий

Вы можете использовать операторы And / Or для проверки дополнительных критериев вместе с Select Case.

В этом примере мы используем Select Case для переменной «age», но мы также хотим проверить пол. Поэтому мы используем оператор And для выполнения более сложного теста:

123456789101112131415161718 Sub NestedSelectCase ()Тусклый секс как струнаРазмер изображения как целое числоsex = "мужской" 'или женскийвозраст = 15Выберите возраст обращенияСлучай <20 И секс = "мужской"Msgbox "Мужчина до 20 лет"Случай <20 И секс = "женский"Msgbox "Женщины до 20 лет"Case Is> = 20 И секс = "мужской"Msgbox "Мужчина старше 20 лет"Case Is> = 20 И секс = "женский"Msgbox "Женщины старше 20 лет"Конец ВыбратьКонец подписки

Вложенные операторы case

Как и в случае с операторами If, вы можете вкладывать операторы Case друг в друга:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Тусклый секс как струнаРазмер изображения как целое числоsex = "мужской" 'или женскийвозраст = 15Выберите возраст обращенияСлучай <20Выберите поле обращенияКорпус "мужской"MsgBox "Мужчина до 20 лет"Корпус "женский"MsgBox "Женщины до 20 лет"Конец ВыбратьCase Is> = 20 И секс = "женский"Выберите поле обращенияКорпус "мужской"MsgBox "Мужчина старше 20 лет"Корпус "женский"MsgBox "Женщины старше 20 лет"Конец ВыбратьКонец ВыбратьКонец подписки

Заявление Case vs. оператор If

Чем больше условий нужно проверить, тем полезнее оператор Case по сравнению с оператором If. Давайте посмотрим на пример.

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

12345 Если Name = "Бюджет" или Name = "Прогноз" или Name = "Trailing12" или _Name = "Flex" или Name = "OtherRatios" или Name = "Comparison" или _Name = "BudReview" или Name = "P & L_Review" или Name = "Other" Тогда'Сделай что-нибудьКонец, если

Вот тот же код, использующий вместо этого оператор Select:

12345 Выберите название обращенияКейс «Бюджет», «Прогноз», «Конечный12», «Гибкий», «Другое соотношение», _«Сравнение», «BudReview», «P&L_Review», «Другое»'Сделай что-нибудьКонец Выбрать

Как видите, в этом сценарии гораздо проще использовать оператор Select. В нем значительно меньше набора текста и его намного легче читать.

Примеры выбора случая VBA

Пример 1. Определяемая пользователем функция оператора case (UDF)

Давайте воспроизведем наш пример расчета оценок выше и создадим UDF для расчета баллов учащегося:

12345678910111213141516 Функция GetGrade (оценка как целое число) как строкаВыберите оценку случаяСлучай от 90 до 100GetGrade = "А"Случай от 80 до 90GetGrade = "B"Случай от 70 до 80GetGrade = "C"Случай от 60 до 70GetGrade = "D"Case ElseGetGrade = "F"Конец ВыбратьКонечная функция

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

Пример 2. Название тестового листа / Заявление о регистре цикла

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

123456789101112 Sub Case_UnProtectSheet ()Dim ws как рабочий листДля каждого ws в листахВыберите Case ws.Name 'Список всех листов с коэффициентамиВариант "Бюджет", "Прогноз", "Конечный12", "Гибкий", "Другое соотношение", _«Сравнение», «BudReview», «P&L_Review», «Другое»ws.UnprotectКонец ВыбратьСледующий wsКонец подписки

Пример 3. Выберите регистр - значение ячейки

В этом примере будет проверяться оценка учащегося в ячейке, при этом буквенная оценка выводится прямо в ячейку справа.

12345678910111213141516 Sub TestCellValue ()Тусклая ячейка как диапазонУстановить ячейку = Диапазон ("C1")Выберите ячейку Case.Случай от 90 до 100cell.Offset (0, 1) = «А»Случай от 80 до 90cell.Offset (0, 1) = "B"Случай от 70 до 80cell.Offset (0, 1) = "C"Случай 60 - 80cell.Offset (0, 1) = "D"Конец ВыбратьКонец подписки

Пример 4. Выберите дело - Даты

Этот пример выбора случая - функция, которая проверяет, в какой квартал попадает дата.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("20.07.2019"))Конец подпискиФункция GetQuarter (dt As Date) как целое числоТусклый лист как рабочий листВыберите Case dtДело CDate ("01.01.2019") до CDate ("31.03.2019")GetQuarter = 1Дело CDate ("01.04.2019") до CDate ("30.06.2019")GetQuarter = 2Дело CDate ("01.07.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 «Число нечетное».Конец ВыбратьКонец подписки

Бывший. 6 Проверьте, соответствует ли дата будний или выходной день

Эти примеры проверят, приходится ли свидание на будний или выходной.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt As Datedt = CDate ("01.01.2020")Выберите день недели обращения (dt)Дело vbПонедельникMsgBox "Сегодня понедельник"Дело vb, вторникMsgBox "Это вторник"Дело vbсредаMsgBox «Сегодня среда»Дело vb четвергMsgBox "Сегодня четверг"Дело vbFridayMsgBox "Это пятница"Дело vbСубботаMsgBox "Сегодня суббота"Дело vbвоскресеньеMsgBox "Это воскресенье"Конец ВыбратьКонец подписки
123456789101112 Sub CheckWeekend ()Dim dt As Datedt = CDate ("01.01.2020")Выберите день недели обращения (dt)Дело vbсуббота, vbвоскресеньеMsgBox "Это выходные"Case ElseMsgBox "Это не выходные"Конец ВыбратьКонец подписки

VBA Select Case в Access

Все приведенные выше примеры работают в Access VBA точно так же, как и в Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs как база данныхDim rst как RecordSetУстановите dbs = CurrentDBУстановите rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)С первой.MoveFirst.РедактироватьВыберите Case rst.Fields («Город»).Кейс "Остин".rst.Fields ("TelCode") = "512"Кейс "Чикаго".rst.Fields ("TelCode") = "312"Кейс "Нью-Йорк".rst.Fields ("TelCode") = "1212"Кейс "Сан-Франциско".rst.Fields ("TelCode") = "415"Конец Выбрать.ОбновлятьКонец сКонец Sus

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave