Операторы перехода по условию

Оператор условного перехода If…Then…Else

Оператор If...Then...Else задает выполнение определенных действий в зависимости от значения выражения условие. Он может иметь строчный и блочный формат записи.

Строчный формат:

If условие Then [операторы_1] [Else операторы_2]

Блочный формат:

If условие Then

[операторы_1]

[ElseIf условие Then

[операторы_2]]

[ElseIf условие Then

[операторы_3]]

. . .

[ElseIf условие Then

[операторы_N]]

[Else

[операторы_N+1]]

End If

Здесь условие может быть как логическим, так и математическим выражением. Если значение выражения равно 0, то оно трактуется как false, все другие значения – true.

В основу этих операторов положен следующий принцип: если условие равно true, то выполняются операторы, находящиеся после Then. Если в строчной форме отсутствует необязательная ветвь Else, то операторы _1 не могут быть опущены, наличие хотя бы одного из них обязательно. В строчной форме все операторы должны находиться на одной строке и разделяться двоеточием, как показано в приведенном ниже примере:

Sub IfThenElse()

Dim a As Single

Dim b As Single

Dim c As Single

a = Range("A1").Value

b = Range("A2").Value

If b=0 Then MsgBox "Деление невозможно!" Else c=a/b : _

MsgBox "c="&c

End Sub

Пример блочной формы:

Sub IfThenElse1()

Dim a As Single

Dim b As Single

Dim c As Single

a = Range("A1").Value

b = Range("A2").Value

If b=0 Then

MsgBox "Деление на ноль невозможно!"

Else

c = a / b

MsgBox "c=" & c

End If

End Sub

Некоторые замечания по использованию блочной формы If…Then... Else.

- Ключевое слово Then должно находиться в одной строке с If и условием. Если вы перенесете его на следующую строку, будет выдано сообщение об ошибке.

- Наличие End If обязательно, его отсутствие вызовет появление синтаксической ошибки.

- Рекомендуется использовать отступы для выделения блоков команд, иначе трудно будет читать код.

Инструкция If...Then...Else применяется в следующих случаях:

1). Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие:

Sub IfThenElse2()

Dim КурсРаб As String

If Range("A5").Value = "Неуд" Or Range("A5").Value = "" Then

MsgBox "Небходимо защитить курсовую работу"

End If

End Sub

2). Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие, а в случае несоответствия выполнить другое действие:

Option Compare Text

––––––––––––––––––––––––––––––––––––––––––––––––––

Sub IfThenElse3()

Dim КурсРаб As String

If Range("a5").Value = "Неуд" Or Range("a5").Value = "" Then

MsgBox "Необходимо защитить курсовую работу"

Else

MsgBox "К экзамену по информатике допущен"

End If

End Sub

Примечание

На уровне стандартного модуля, в котором находится процедура
IfThenElse3, помещена инструкция Option Compare Text. Инструкция Option Compare является директивой препроцессора и применяется на уровне модуля перед первой процедурой модуля для задания используемого по умолчанию способа сравнения строковых данных.

Формат инструкции:

Option Compare {Binary | Text | Database}

Инструкция Option Compare указывает способ сравнения строк Binary, Text или Database для модуля. Если модуль не содержит инструкцию Option Compare, то по умолчанию используется способ сравнения Binary. Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:

A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш

Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:

(A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш)

Инструкция Option Compare Database может использоваться только в Microsoft Access.

Использование Option Compare Text в модуле, в который включена процедура IfThenElse3, делает безразличным как записана информация в ячейку A5 – "Неуд", "неуд", "НЕУД", "Неуд", "НЕуд" и т.д.

В процедуре IfThenElse2 используется по умолчанию Option Compare Binary и, если ячейка A5 будет не пустой и будет содержать что-то, отличное от "Неуд", например, "неуд", то результатом проверки условия будет False и сообщения "Необходимо защитить курсовую работу" не будет.

3). В случае если первая проверка условия вернула False, но нужно проверить на соответствие еще нескольким условиям, удобно использовать ElseIf.

Пример:

Sub IfThenElse4()

If Range("a6").Value >= 0.84 Then

MsgBox "Ваша оценка " & """Отлично"""

ElseIf Range("A6") < 0.84 And Range("A6") >= 0.67 Then

MsgBox "Ваша оценка ""Хорошо"""

ElseIf Range("A6") < 0.67 And Range("A6") > 0.5 Then

MsgBox "Ваша оценка ""Удовлетворительно"""

Else

MsgBox "Ваша оценка ""Неудовлетворительно"""

End If

End Sub

Операторы If…Then можно вкладывать друг в друга. Процедуру IfThenElse4 можно переписать в другом виде, используя вложение операторов If…Then:

Sub IfThenElse5()

If Range("a6").Value >= 0.84 Then

MsgBox "Ваша оценка " & """Отлично"""

Else

If Range("A6") < 0.84 And Range("A6") >= 0.67 Then

MsgBox "Ваша оценка " & """Хорошо""""

Else

If Range("A6") < 0.67 And Range("A6") > 0.5 Then

MsgBox "Ваша оценка " & """Удовлетворительно"""

Else

MsgBox "Ваша оценка " & """Неудовлетворительно"""

End If

End If

EndIf

End Sub

Упражнение 1

1. Изучите операторы условного перехода If…Then…Else.

2. Скопируйте код процедур IfThenElse, IfThenElse1 в модуль, выполните процедуры и проанализируйте результаты их выполнения.

Упражнение 2

1. Изучите инструкцию

Option Compare Binary | Text | Database,

которая указывает способ сравнения строк.

2. Скопируйте код процедур IfThenElse2, IfThenElse3 в модуль, выполните процедуры и проанализируйте результаты их выполнения.

Упражнение 3

Скопируйте в модуль VBA и выполните процедуры IfThenElse4 и IfThenElse5, проанализируйте результаты их выполнения.

Оператор варианта Select…Case

Оператор If…Then…Else может содержать большое количество выражений ElseIf и поэтому бывает трудной для проектирования и восприятия. В подобных случаях альтернативой этого оператора может быть оператор Select Case, который легче для восприятия и лучше приспособлен для работы в ситуациях со многими выходами. Оператор Select Case выполняет одну из нескольких групп операторов в зависимости от значения некоторого выражения. Он имеет следующий формат:

Select Case выражение

[Сase список_значений_выражений_1

[операторы_1]]

...

[Case список_значений_выражений_n

[операторы_n]]

[Case Else

[операторы_n+1]]

End Select

Здесь список_значений_выражений_n обязателен и может быть сформирован одним из трёх способов.

- Указано выражение:

Case выражение

Если группа операторов выполняется при нескольких значениях выражения, то эти значения перечисляются через запятую.

- Указан диапазон значений от одного значения выражения до другого, в котором меньшее значение должно быть перед ключевым словом To.

Case выражение To выражение

- С использованием ключевого слова Is, за которым следует оператор отношения(>, <, >=, <=, <>) и выражения, с которым будет сравниваться результат выражения, записанного в Select Case.

Is оператор_отношения выражение

Группы операторов операторы_1 . . . операторы_n+1 необязательны, представляют собой один или группу операторов, которые выполняются, если выражение совпадает с любым значением из соответствующего списка значений выражений.

Оператор Else необязателен. Если он присутствует, то операторы группы операторы_n+1 выполняются в том случае, если выражение не равно ни одному из значений, представленных в списках значений выражений.

Если выражение совпадает с любым из Case-выражений список_значений_выражений_n, выполняются операторы_n, следующие за этим Case-предложением (до следующего Case-предложения или до End Select). Управление выполнением программы передаётся оператору, следующему за предложением End Select. Если выражение совпадает с список_выражений-n в нескольких Case-предложениях, выполняются операторы, соответствующие первому совпадению. Конструкция Select Case допускает вложения. Оператор Case Else целесообразно использовать при выборе между тремя и более вариантами.

Приведённая ниже процедура CaseSelect позволяет решить ту же задачу, которую решает процедура IfThenElse4.

Sub CaseSelect()

Select Case Range("A6")

Case Is >= 0.84

MsgBox "Ваша оценка " & """Отлично"""

Case 0.68 To 0.83

MsgBox "Ваша оценка " & """Хорошо"""

Case Is > 0.5

MsgBox "Ваша оценка " & """Удовлетворительно"""

Case Else

MsgBox "Ваша оценка " & """Неудовлетворительно"""

End Select

End Sub

Упражнение 4

1. Изучите оператор варианта Select Case.

2. Скопируйте код процедуры CaseSelect в модуль, выполните процедуру при различных значениях ячейки A6 и проанализируйте результаты её выполнения.

Упражнение 5

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

Цена Количество проданных товаров
<=10
<=15
<=20
>20

2. В созданной процедуре использовать инструкцию If…Then…Else, содержащую ключевое слово ElseIf; использовать функцию InputBox для ввода значений переменной Цена.

3. Составьте и выполните процедуру в соответствии с заданием, используя инструкцию Select Case с наличием ветви Case Else.