
- •Ввод и вывод информации
- •Функция InputBox
- •Функция MsgBox
- •Допустимые значения аргумента buttons
- •Возвращаемые функцией значения
- •Организация ветвлений Инструкция If...Then...Else
- •Инструкция Select Case
- •Циклы в программе
- •Использование условных инструкций
- •Типы циклов
- •Инструкция For...Next
- •Инструкция For Each...Next
- •Инструкция Do...Loop
- •Повторение инструкций, пока условие имеет значение True
- •Повторение инструкций, пока условие не примет значение True
- •Выход из цикла Do...Loop
Организация ветвлений Инструкция If...Then...Else
Инструкция If...Then...Else выполняет определенные инструкции или наборы инструкций в зависимости от значения условия. Допускаются многократно вложенные инструкции If...Then...Else, имеющие столько уровней вложения, сколько потребуется.
Эта инструкция задает выполнение определенных групп инструкций в зависимости от значения выражения.
Синтаксис:
If условие Then [инструкции] [Else инструкции_else]
Условие - это выражение логического типа. Результат вычисления условия всегда имеет булевский тип. Выражение может быть простым и сложным. При записи условий могут использоваться все возможные операции отношения.
Допускается также использование блоковой формы синтаксиса:
If условие Then
Блок_ инструкций
Else
Блок_ инструкций _ Else
End If
или же:
If условие_1 Then
Блок_инструкций_1
ElseIf условие_2 Then
Блок_ инструкций _2
elseif условие_3 Then
…
Else
блок_ инструкций_ Else
End If
Ветвь Else является необязательной.
Простую однострочную форму рекомендуется использовать для коротких, простых проверок. Однако блочная форма обеспечивает более структурированный подход и большую гибкость по сравнению с однострочной формой. Блочная форма обычно проще для чтения, обработки и отладки.
Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If...Then, но все инструкции должны находиться на одной строке и разделяться двоеточием, как в следующем примере:
If A > 10 Then A = A + 1 : B = B + A : C = C + B
Если при такой форме записи оператора необходимо продолжить его на следующей строке, следует использовать символ подчеркивания «_» в конце каждой строки.
В блоковой форме инструкция If должна быть первой инструкцией в строке. Компоненты Else, ElseIf и End If могут иметь перед собой только номер строки или ее метку. Блок If должен заканчиваться инструкцией End If.
Для того, чтобы определить, представляет инструкция блок If или нет, проверяется элемент, следующий за ключевым словом Then. Если после Then на той же строке стоит любой элемент, не являющийся комментарием, эта инструкция рассматривается как однострочная инструкция If.
Оба предложения Else и ElseIf являются необязательными. В блоке If допускается любое число предложений ElseIf, но ни одно такое предложение не может появляться после предложения Else. Допускаются вложенные блоки инструкций If, то есть блоки If, содержащиеся в других блоках.
При выполнении блока If (вторая форма синтаксиса), проверяется условие. Если условие имеет значение True, выполняются инструкции, следующие за Then. Если условие имеет значение False, то по очереди оценивается каждое условие ElseIf (если такие имеются). При обнаружении условия со значением True выполняются инструкции, непосредственно следующие за соответствующим предложением Then. Если ни одно из условий ElseIf не имеет значение True (или предложения ElseIf отсутствуют), выполняются инструкции, следующие за Else. После выполнения инструкций, следующих за Then или Else, выполнение продолжается с инструкции, следующей за End If.
Пример 1
Следующая процедура присваивает значение текущей даты переменной myDate, если начальное значение myDate меньше значения текущей даты. Для выполнения только одной инструкции, когда условие имеет значение True, используется однострочный синтаксис инструкции If...Then...Else. Ветвь Else отсутствует.
Sub FixDate()
myDate = #2/13/95#
If myDate < Now Then myDate = Now
End Sub
Пример 2
Функция Премия вычисляет размер премии на основе оценки проделанной работы.
Балл |
Размер премии |
1 |
10% |
2 |
9% |
3 |
7% |
в остальных случаях |
0% |
Здесь используется блочная форма синтаксиса инструкции If...Then...Else. Инструкция, следующая за Else, выполняется, если условия во всех инструкциях If и ElseIf имеют значения False.
Function Премия (Балл, оклад)
If Балл= 1 Then
Премия= оклад* 0.1
ElseIf Балл= 2 Then
Премия= оклад* 0.09
ElseIf Балл= 3 Then
Премия= оклад* 0.07
Else
Премия= 0
End If
End Function
Пример 3
В данном примере используется простая однострочная форма условного оператора. Используется символ подчеркивания для продолжения оператора на следующей строке.
Function FUNNY(X)
If X < 0.2 Then FUNNY = 1 + X*(1 + X) _
Else: If X <= 0.8 Then FUNNY = (1 + X ^ (1 / 2)) / (1 + X ) _
Else FUNNY = 2 * Exp((-2) * X)
End Function
Пример 4
В этом примере также применяется простая однострочная форма условного оператора. Используется символ подчеркивания для продолжения оператора на следующей строке.
Function G(y)
If y <= 0 Then G = (1 + y ^ 2) / (1 + y ^ 4) ^ (1 / 2) _
Else G = 2 * y + Sin(y) ^ 2 / (2 + y)
End Function