Оператор розгалуження "Select Case"
Альтернативою оператору "If. End" служить оператор "Select Case" (з англійської "Select Case" можна перевести як "Вибір Ситуації"), який спрощує сприйняття коду "на око". І якщо "If. End" оператор в кожному своєму "ElseIf" змушений звертатися до перевіряється значенням знову і знову (припустимо, вираз кожного разу однакова), то "Select Case" робить це тільки один раз, що дозволяє останньому великими масивами даних працювати швидше. Цей оператор дозволяє зручно задати розгалуження програми з однієї точки в велику кількість гілок. Тобто в основному застосовується при множинних умовах перевірки, коли перевіряються умов більше двох.
Структура оператора "Select Case".
Давайте подивимося, як виглядає узагальнена структура оператора і розберемо, що є що (різні приклади приватного використання коду будуть приведені в кінці статті):
Як шматка [Значення] можна вставити будь-яку змінну або властивість, значення якої або якого Ви можете перевірити. Можна також перевіряти значення конкретної комірки. При цьому працювати можна не тільки з числами, а й з текстами. І навіть з булевими значеннями TRUE / FALSE ( «Правда» і «Брехня»), про що знають не всі.
[Конкретне значення] - це те, з чим порівнюється [Проверяемое Значення]. І, якщо одне задовольняє іншому, то виконується [Деякий Дія]. Є кілька варіантів запису для блоку [Конкретне значення]. Для текстових і числових значень можна записувати різні значення через кому:
Для чисел можна вибирати діапазони:
Також для чисел можна використовувати логічний оператор порівняння разом з часткою "Is":
Допустимо використовувати і логічні оператори, що дозволить передбачати найскладніші випадки і проводити паралельні порівняння з іншими змінними. Крім оператора «Or», який замінюється звичайної коми.
[Деякий Дія] може бути абсолютно будь-яким. Якщо ви його пропускаєте - то для даного випадку програма буде діяти. «Case [Конкретне значення]» разом з частиною [Деякий Дія] складаються в один блок:
Case Else - це всі інші випадки, які не підійшли ні під одне інше [Конкретне значення] у всіх блоках оператора "Select Case". Якщо блок "Case Else" відсутній і жоден інший блок не підійшов, то програма робить логічне "нічого". Case Else повинен бути останнім перевіряється випадком серед всіх блоків перевірки в операторі. Після нього інших блоків бути не повинно, інакше отримаємо синтаксичну помилку "Case without Select Case".
В кінці оператора повинен стояти "End Select", який служить "точкою" в "пропозиції" оператора.
Розглянемо кілька прикладів використання коду і почнемо з найпростішого. У першому прикладі в залежності від значення Х виводиться повідомлення.
Другий приклад показує деякі види записи перевіряється значення. Залежно від кількості листів в книзі з макросом виводиться різний повідомлення. Зверніть увагу, що якщо листів в книзі 7, то першим спрацює "Case 7", хоча умова "Case 5 to 12" теж підходить, але варто пізніше.
Третій приклад орієнтується на логічне значення TRUE або FALSE. Перевіряється, видно або прихований останній лист в поточній книзі з макросом. За допомогою двокрапки може замінюватися перенесення рядка для отримання більш витонченого коду.
Четвертий приклад показує, що «Case» може орієнтуватися і на інші змінні. В даному випадку будемо перевіряти рівність трьох змінних за допомогою логічного оператора «And»:
П'ятий приклад показує, як через кому в перевіряється значенні для «Case» можна вказати цілий набір чисел. Припустимо, є деяка функція і ми перевіряємо, чи може наше число в цій функції використовуватися. За умовою, нас влаштовують числа в діапазоні від 5 (не включаючи 5) до мінус нескінченності, від 12 до 15 включно кінці і від 20 (включаючи 20) до плюс нескінченності.
Підводячи риску, зауважу, що оператор «Select Case» за структурою досить простий і зручний у використанні. Він менш гнучкий в порівнянні з «If ... End», якщо по ходу перевірок потрібно міняти перевіряється значення, але значно виграє при різноманітних перевірках одного і того ж вирази. Для чого власне і був створений.
Дякуємо за увагу.
Статтю c прикладами склав Роман «Rioran» Воронов для www.excelworld.ru