Принятие решений: 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 - для сравнения объектных переменных.