Принятие решений: If-Then-Else
Цикл с постусловием
Цикл с предусловием
Как вы уже знаете, цикл с предусловием While - Wend выполняется до тех пор, пока условие, указанное на входе, верно.
Ниже представлено решение такой задачи: выводить на экран случайные числа от 0 до 20 до тех пор, пока не будет выведено число больше 10.
А = 1
While А < 10
А = Int(Rnd() * 20)
MsgBox А
Wend
Сначала мы приравниваем переменной А число 1. Проверка при входе в цикл находит, что А меньше 10 и запускает первый проход. Переменной А приравнивается целое случайное число, это число выводится в окне сообщения. Дальше следует новая проверка - если A все еще меньше 10 - все повторяется снова. Если A больше или равно 10 - число выводится, после чего выполнение цикла прекращается.
Теперь рассмотрим цикл с постусловием.
Цикл Do-Loop While выполняется до тех пор, пока значение на выходе из цикла верно. Подобные циклы используют, например, для проверки правильности ввода каких-либо данных пользователем. Если данные введены неверно - цикл выполняется снова.
Аналогично действует цикл Do-Loop Until - он будет выполняться до тех пор, пока условие цикла неверно (то есть равно False).
В листинге ниже вы можете найти пример такого цикла. Здесь пользователю предлагается ввести какое-нибудь число. Если введено не число (то есть функция IsNumericвозвратит False), программа выведет окно ввода снова.
Dim var_A
Do
var_A = InputBox("Введите число")
Loop Until IsNumeric(var_A)
Программы на VBA умеют принимать решения - для этого существуют операторы условного перехода. Они объединены в конструкцию If - Then - Else.
В этой конструкции могут быть использованы следующие операторы сравнения .
Таблица Операторы сравнения | |
Оператор | Описание |
= | Равно |
<> | Не равно |
> | Больше |
< | Меньше |
>= | Больше или равно |
<= | Меньше или равно |
Like | Сравнение строки с шаблоном |
Is | Сравнение объектов |
Напишем простую программу, которая спрашивает у пользователя его возраст. Если введенный возраст меньше 18 - программа должна вывести надпись "Вам менее 18 лет", если больше или равен 18 - надпись "Вам 18 или больше".
a = InputBox("Введите ваш возраст")
If a < 18 Then MsgBox ("Вам меньше 18")
If a >= 18 Then MsgBox ("Вам 18 или больше")
Здесь представлен оператор в простейшем виде - проверка условия и выполнение однострочной команды. А что если нужно выполнить не одну команду, а несколько? Для этого служит команда End If
a = InputBox("Введите ваш возраст")
If a < 18 Then
MsgBox ("Вам меньше 18")
MsgBox ("Вам не следует смотреть этот фильм")
End If
If a >= 18 Then MsgBox ("Добро пожаловать")
Здесь программа выводит два сообщения, если пользователю меньше 18 лет.
Оператор может иметь вид If - Then - Else . Благодаря ему два оператора If - Then можно объединить в один.
a = InputBox("Введите ваш возраст")
If a < 18 Then MsgBox ("Вам меньше 18") _
Else MsgBox ("Вам больше 18")
Применение команды Else так же позволяет исполнять многострочные команды. Например, вот так .
a = InputBox("Введите ваш возраст")
If a < 18 Then
MsgBox ("Вам меньше 18")
MsgBox ("Вам не следует смотреть этот фильм")
Else
MsgBox ("Вам больше 18")
MsgBox ("Добро пожаловать")
End If
В операторе If возможно использование сложных условий. Например, вы просите пользователя ввести имя и пароль. Если они соответствуют данным, хранящимся в системе, программа выводит приветствие, иначе - сообщает о том, что пользователь ввел неправильные сведения. Очевидно, что нам нужно проверить два условия, причем важно, чтобы и то и другое выполнялось. Для этого можно воспользоваться логическим оператором And, который трактуется как "И". Конструкция с And выглядит так.
UserName = InputBox("Введите имя пользователя")
UserPass = InputBox("Введите ваш пароль")
If UserName = "Александр" And UserPass = "12345" Then
MsgBox ("Добро пожаловать в систему")
Else
MsgBox ("Неверное имя пользователя или пароль")
End If
Словесно вышеприведенную конструкцию можно описать так: "Если имя равно Александр и пароль равен 12345…".
Логический оператор Or (переводится как "Или") позволяет принять положительное решение, если выполняется хотя бы одно из условий. Например, нам нужно узнать имя пользователя, и если оно соответствует одному из имен, зарегистрированных в системе, вывести приветствие, иначе - вывести информацию об отсутствии в системе такого пользователя.
UserName = InputBox("Введите имя пользователя")
If UserName = "Александр" Or UserName = "Сергей" Or _
UserName = "Николай" Then
MsgBox ("Добро пожаловать в систему, " & UserName)
Else
MsgBox ("В системе нет такого пользователя!")
End If
And и Or можно использовать вместе.
Оператор Not (Не) позволяет задавать условия с отрицанием. Например, вы можете пропустить в систему всех пользователей кроме пользователя с именем "Владимир".
Для проверки дополнительных условий можно использовать оператор If - Then - Else.
Выше, в таблице, есть пара необычных операторов - Like для сравнения строк с шаблоном, и Is - для сравнения объектных переменных.