Синтаксис
If <Условие> Then <ИнструкцияДа> [Else <ИнструкцияНет>]
Если условие принимает значение True, выполняется ИнструкцияДа, идущая после слова Then. Если условие не выполняется (принимает значение False), выполняется ИнструкцияНет, идущая после слова Else. Схема алгоритма изображена на Error: Reference source not found.
Ч
асть
оператора, начинающаяся с Else,
не является обязательной. Если она
отсутствует, говорят, что оператор
записан в сокращённой форме, иначе речь
идёт о полной форме. Схема алгоритма,
соответствующая сокращённой форме
условного оператора изображена на Error: Reference source not found.
Приведённая конструкция позволяет выполнить только по одной инструкции в случае выполнения или невыполнения условия. Если одна из ветвей должна содержать несколько инструкций, целесообразно применение блока If.
В следующем примере выполняется вычисление натурального логарифма. Как известно, логарифм можно вычислить только для положительного значения аргумента. Попытка вычислить логарифм неположительного числа, приведёт к аварийному завершению программы. Схема алгоритма представлена на Рис. 1
Рис. 1. Алгоритм вычисления натурального логарифма
Текст программы
Sub ln()
Dim x As Single
x = Val(InputBox("Введите x"))
If x > 0 Then MsgBox ("Ln " & Str(x) & " = " & Str(Log(x))) _
Else MsgBox ("Аргумент должен быть больше нуля")
End Sub
2.1.3Блок If
Блок If выполняет функции условного оператора, но позволяет реализовать по несколько операторов в каждой ветви алгоритма.
Синтаксис
If <Условие> Then <Инструкции> [Else <Инструкции>] End If
Как и любой блок в VBA, блок If заканчивается ключевым словом End и названием блока. Ветвь Else не является обязательной.
Пример
Вычислить площадь треугольника, заданного длинами сторон.
Как известно, чтобы вычислить площадь треугольника по длине сторон, необходимо убедиться, что треугольник существует. Иначе при вычислении площади по формуле Герона квадратный корень будет извлекаться из отрицательного числа, что приведёт к аварийному завершению программы.
Схема алгоритма (Рис. 2)
Рис. 2. Алгоритм вычисления площади треугольника
Текст программы
Sub Triangle()
Dim a, b, c, p, s As Single, outstr As String
a = Val(InputBox("Введите длину стороны 1"))
b = Val(InputBox("Введите длину стороны 2"))
c = Val(InputBox("Введите длину стороны 3"))
If ((a + b) > c) And ((a + c) > b) And ((b + c) > a) Then
p = (a + b + c) / 2
s = Sqr(p * (p - a) * (p - b) * (p - c))
outstr = "Площадь треугольника равна " & Str(s)
Else
outstr = "Треугольник не существует"
End If
MsgBox (outstr)
End Sub
2.1.4If Then ElseIf … Else End If
Рассмотрим задачу следующего содержания: по введённым длинам сторон определить, является ли треугольник равнобедренным, равносторонним, ни тем, ни другим, или вообще не существует.
Алгоритм задачи
Рис. 3. Определение вида треугольника.
Для решения этой задачи требуется последовательная проверка трёх условий: в случае невыполнения первого проверяется второе, в случае невыполнения второго проверяется третье. В схему этого алгоритма идеально укладывается блок операторов «If Then ElseIf … Else End If».
