Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Операторы альтернативы (ветвления)

До сих пор рассматривались процедуры и функции, которые VBA выполняет в линейном порядке - VBA начинает выполнение кода с первого оператора после строки объявления процедуры (функции) и продолжает выполнять каждый оператор построчно до тех пор, пока не будет достигнут оператор End Sub (End Function). Такой линейный алгоритм можно представить нижеследующей блок-схемой (рис.1):

Операторы альтернативы (<a href=ветвления). Автор24 — интернет-биржа студенческих работ">

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

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

Операторы If..Then и If..Then..Else

Определение 1

Простейшими операторами условного перехода являются операторы If..Then и If..Then..Else. Первый оператор позволяет выбирать единственную ветвь процедуры (рис.2), тогда как второй дает возможность выбирать из двух альтернативных ветвей кода процедуры (рис.3) на основе оценки того, является ли условие равным True или False.

Синтаксис If..Then

Вариант 1: If Then

Вариант 2: If Then End If

Где:

  • - логическое выражение;
  • - один, несколько или ни одного оператора VBA.

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

Второй вариант позволяет указывать несколько операторов в разных строках.

«Операторы альтернативы (ветвления)» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в блоке . Если это логическое выражение равно True, то выполняется оператор (операторы) блока . Затем VBA продолжает выполнение кода следующего за строкой If..Then (вариант 1) или за ключевыми словами End If (вариант 2). Если же логическое выражение равно False, то операторы блока пропускаются и выполняется код, следующий за этой секцией.

Блоки Else If и Else - необязательны.

Синтаксис If..Then..Else

Вариант 1: If Then Else

Вариант 2: If Then Else End If

Где:

  • - логическое выражение;
  • , - один, несколько или ни одного оператора VBA.

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

Второй вариант позволяет указывать несколько операторов в разных строках.

Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в блоке . Если это логическое выражение равно True, то выполняется оператор (операторы) блока . Затем VBA продолжает выполнение кода следующего за строкой If..Then (вариант 1) или за ключевыми словами End If (вариант 2). Если же логическое выражение равно False, то выполняются операторы блока .

Замечание 1

Следует сказать, что блок операторов If..Then..Else (вариант 2) легче читать и понимать. Поэтому, советуют использовать именно этот вариант, даже если в блоках , будет находиться по одному оператору.

Оператор Select Case

Данный оператор служит альтернативой оператору If..Then. В переводе с английского "Select Case" можно перевести как "выбор ситуации". И если оператор If..Then в каждом своём Else If вынужден обращаться к проверяемым значениям снова и снова (допустим, выражение каждый раз одинаковое), то Select Case делает это только один раз, что позволяет последнему на больших массивах данных работать быстрее. Этот оператор позволяет удобно задать ветвление программы из одной точки в большое количество веток. То есть в основном применяется при множественных условиях проверки, когда проверяемых условий больше двух.

Давайте посмотрим, как выглядит обобщённая структура:

Select Case

Case

Case Else

End Select

В качестве блока можно вставить любую переменную или свойство, значение которой или которого вы можете проверить. Можно также проверять значение конкретной ячейки. При этом работать можно не только с числами, но и с текстами. И даже с булевыми значениями True/False (правда/ложь), о чем знают не все.

- это то, с чем сравнивается . И, если одно удовлетворяет другому, то выполняется. Есть несколько вариантов записи для блока . Для текстовых и числовых значений можно записывать разные значения через запятую:

Case 3, 4, 5, "да", "нет"

Для чисел можно выбирать диапазоны:

Case 3 to 10 'От 3-х до 10-ти, включая сами 3 и 10.

Также для чисел можно использовать логический оператор сравнения вместе с частицей Is:

Case Is

Case Is = 3 'Равно 3-м. Избыточная запись, достаточно Case 3

Case Is > = 4 'Больше либо равно 4

Case Is 0 'Не равно нулю

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

Case ... And ...

Case Not ...

может быть абсолютно любым. Если вы его пропускаете - то для данного случая программа будет бездействовать. Case вместе с частью складываются в один блок:

Case

Таких блоков может быть любое количество, которое уложится в предельные размеры процедуры (она должна иметь объем не более 64 килобайт). Полезно знать, что VBA просматривает соответствие блоков и вдоль по блокам сверху вниз. То есть, у вас может быть 2 блока с одинаковым Case, но выполнится только тот, который будет раньше найден программой при просмотре кода сверху вниз.

Определение 2

Case Else - это все другие случаи, которые не подошли ни под одно другое во всех блоках оператора Select Case. Если блок Case Else отсутствует и ни один другой блок не подошёл, то программа делает логичное "ничего". Case Else должен быть последним проверяемым случаем среди всех блоков проверки в операторе. После него других блоков быть не должно, иначе получим синтаксическую ошибку "Case without Select Case".

В конце оператора должен стоять End Select, который служит "точкой" в "предложении" оператора.

Рассмотрим примеры использования кода и начнём с самого простого. В первом примере в зависимости от значения Х выводится сообщение.

Пример 1

Sub SelectCase_example_1()

Dim X As Long

X = 1 'Можете изменять эту цифру и смотреть, что получится.

Select Case X

Case 1

MsgBox "Один"

Case 2

MsgBox "Два"

Case 3

MsgBox "Три"

Case Else

MsgBox "Выбрано что-то другое"

End Select

End Sub

Второй пример показывает некоторые виды записи проверяемого значения. В зависимости от количества листов в книге с макросом выводится разное сообщение. Обратите внимание, что если листов в книге 7, то первым сработает “Case 7”, хотя условие “Case 5 to 12” тоже подходит, но стоит позже.

Пример 2

Sub SelectCase_example_2()

'Введём переменную и посчитаем количество листов в текущей книге:

Dim X As Long

X = ThisWorkbook.Sheets.Count

Select Case X 'В зависимости от количества листов в книге выведем сообщение.

Case 1 'Если 1 лист, то...

MsgBox "Один лист в книге"

Case 2, 3, 4 'Если листов 2 или 3 или 4

MsgBox "Несколько листов в книге"

Case 7 'Если листов 7

MsgBox "Красивое количество листов"

Case 5 To 12 'Если листов от 5 до 12

MsgBox "Почти брошюра"

Case Is >= 14 'Если листов больше либо равно 14

MsgBox "Листов как в фолианте"

Case Else 'Все остальные случаи, а именно 13

MsgBox "Чёртова дюжина листов"

End Select

End Sub

Дата написания статьи: 06.05.2017
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot