Операторы перехода по условию
Оператор условного перехода 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.