Операторы ветвления VBA: простой выбор. «VBA Управляющие структуры VBA

Зачастую в определенном месте программы необходимо выполнять те или иные операторы, в зависимости от некоторых условий. Эта возможность в Visual Basic реализовать при помощи так называемых управляющих конструкций (или структур), которые в свою очередь состоят из структур принятий решений и циклов. Ниже приводится подробное описание двух существующих конструкций принятия решений.

Конструкция If:Then. Существует несколько разновидностей данной структуры. Если при выполнении какого-либо условия необходимо выполнять один оператор, то нужно использовать конструкцию следующего вида:

If условие Then оператор

В том случае, когда результатом проверки условия является значение True (истина), то выполняется оператор, находящийся после служебного слова Then. С другой стороны, если после проверки условия было получено значение False (ложь), то выполнить следующий по порядку оператор. Все описанные параметры данной структуры должны быть указаны в одной строке.

Если при выполнении условия требуется выполнить не один, а несколько операторов, то следует использовать такую конструкцию:

If условия Then Операторы End If

В случае истинности проверяемого условия будут выполнены операторы, расположенные после ключевого слова Then. С другой стороны, если условие является ложным, то выполняется следующий после данной конструкции оператор. В том случае, когда в блоке операторы находится только один оператор, то данная структура все равно должна заканчиваться служебным словосочетанием End If.

При необходимости выполнении того или иного оператора (или блока операторов) в зависимости от результата проверки определенного условия, в языке Visual Basic следует использовать такую конструкцию:

If условия Then Операторы1 Else Операторы2 End If

If условие Then Операторы1 Else: Операторы2 End If

Если результат проверки условия является значение True, то будет выполнен блок операторы1, находящийся после ключевого слова Then. С другой стороны, если проверка условия дала результат False, то будет выполнен блок операторы2, расположенный после служебного слова Else.

Во втором из приведенных вариантов в качестве блока операторы2 может использоваться как один оператор (тогда он записывается после знака ":" в той же строке, что и служебное слово Else), так и несколько (при этом каждый оператор, начинается со второго, записывается в отдельной строке).

В том случае, когда определенное действие (или набор действий) нужно выполнять после проверки не одного, а нескольких условий на языке Visual Basic следует использовать такую управляющую структуру:

If условие Then Операторы1 ElseIf условие2 Then Операторы2 . . End If

Если условие1, находящееся после ключевого слова If, истинно, то выполняется блок операторы1, расположенный после Then. Если же оно ложно, то осуществляется проверка условия2, находящегося после служебного слова ElseIf, в случае его истинности выполняется блок операторы2 и т.д. Если ни одно из условий не является истинным, то есть результатом всех проверок является значение False, то выполнятся блок операторыN, расположенный после ключевого слова Else (данный блок является необязательным).

В дополнение к приведенной выше структуре If:Then следует также рассмотреть функцию IIf, которая возвращает одно из двух значений, в зависимости от проверяемого условия.

Синтаксис данной функции имеет вид:

IIf(условие, значение1, значение2)

В том случае, когда результатом проверки условия является значение True, функция возвращает значение1, а когда проверка дает значение False, то возвращаемы результат - значение2. Например:

Dim intA As Integer, strA As String intA = 6 strA = IIf(intA Mod 2=0, "Четное", "Не четное")

Если число intA делится на 2 без остатка, то строке strA будет присвоено значение "Четное", в противном случае - "Не четное".

Конструкция Select:Case. Когда существует несколько операторов (или блоков операторов), которые необходимо выполнять в случае истинности того или иного условия, то запись конструкции If:Then окажется достаточно громоздкой. Поэтому в подобных случаях следует использовать структуру Select:Case, которая улучшает читаемость программы. Ее конструкция выглядит следующим образом:

Select Case переменная Case значения1 Операторы1 Case значения2 Операторы2 . . . End Select

Если переменная содержит значение1, расположенное после первого по порядка ключевого слова Case, то выполняется блок операторы1. С другой стороны, если содержимое переменной равно значению2, то выполняется блок операторы2 и т.д. Когда содержимое переменной не равно ни одному из приведенных значений, то выполняется блок операторыN, находящийся после служебного словосочетания Case:Else, которое является необязательным в рассматриваемой конструкции.

В том случае, когда при нескольких значениях переменной необходимо выполнять один и тот же оператор (блок операторов), то список этих значений нужно указать после ключевого слова Case, разделяя их запятыми.

Например:

Select Case x Case 1 x=x+1 Case 2, 3, 4 x=10 Case Else x=20 End Select

Основные операторы языка VBA

Комментарии (0)

3.1. Правила записи операторов

При записи операторов необходимо придерживаться следующих правил:

Каждый новый оператор записывается с новой строки.

Чтобы записать несколько операторов на одной строке, их разделяют между собой двоеточием (:).

Если оператор не помещается в одной строке, то необходимо поставить в конце строки пробел и знак подчеркивания (_), а затем продолжить не поместившуюся часть на следующей строке.

3.2. Оператор присваивания

Оператор присваивания используется, если какой-то переменной нужно присвоить новое значение. Он имеет следующий синтаксис:

ИМЯ_ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ

Сначала вычисляется выражение в правой части, а затем результат присваивается переменной, стоящей в левой части.

Например . Записать с помощью оператора присваивания следующее математическое выражение:

На VВА это выражение можно записать в виде следующего оператора:

Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

3 .3. Операторы ввода-вывода

3 .3.1. Оператор и функция MsgBox

Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.

Он имеет следующий синтаксис:

MsgBox Сообщение[,Кнопки][, Заголовок]

Аргументы:

Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком & . Использование в этом аргументе Chr(13) приводит к переходу на новую строку при выводе информации.

Кнопки - значение этого аргумента определяет категории появляющихся в окне кнопок. От значения аргумента кнопкизависит также, появляется ли в окне какой-либо значок. Если не указано, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке ОК. В табл. 3.1 приведены возможные комбинации кнопок и значков в окне сообщений.

Заголовок - задает заголовок окна.

Функция MsgBox возвращает значение типа Integer, указывающее, какая кнопка была нажата в диалоговом окне.

Таблица 3.1. Допустимые значения переменной кнопки

Отображение

Аргумент

Кнопка ОК

Кнопки ОК и Отмена

Кнопки Да и Нет

Кнопки Да, Нет и Отмена

Кнопки Прекратить, Повторить и Игнорировать

VbAbortRetryIgnore

Кнопки Повторить и Отмена.

Информационный знак

Знак вопроса

Знак восклицания

Например . Вывести сообщение о текущей дате.

MsgBox "Сегодня на календаре" & Date , "Внимание"

В результате будет выведено следующее окно (рис.3.1).

После щелчка по кнопке ОК окно сообщения закроется, и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом MsgBox.

3.3.2. Функция InputBox

Функция InputBox осуществляет ввод значений переменных с помощью окна ввода и имеет следующий синтаксис:

Имя_Переменной = InputBox(Сообщение[, Заголовок ] )

Аргументы:

Сообщение - обязательный аргумент. Задает в окне информационное сообщение, обычно поясняющее смысл вводимой величины

Заголовок - задает заголовок окна.

Например , Ввести значение переменной N с клавиатуры, предусмотрев значение по умолчанию равное 10.

Для этого можно использовать следующий оператор:

N = InputBox("Введите N", "Ввод исходных данных",10)

В результате будет выведено следующее окно для ввода значения переменной N (рис.3.2).

Если значение по умолчанию подходит пользователю, то после щелчка кнопки ОК окно ввода закроется, переменной N присвоится значение 10 и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом InputBox .

Если же значение по умолчанию не подходит пользователю, то перед щелчком по кнопке ОК необходимо ввести нужное значение переменной N.

3 .4. Условный оператор IF

Для реализации разветвляющегося вычислительного процесса в VBA используется оператор If…Then…Else, который представляет собой простейшую форму проверки условий. Он имеет следующий синтаксис:

If УСЛОВИЕ Then ОПЕРАТОР_1 E lse ОПЕРАТОР_2

ОПЕРАТОР_1 выполняется, если УСЛОВИЕ истинно, в противном случае выполняется ОПЕРАТОР_2 . При этом оператор If…Then…Else записывается в одну строку.

УСЛОВИЕ - это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 3.2.

Таблица 3 .2. Логические отношения

Операция

Название

Выражение

Результат

True, если А равно В

True, если А не равно В

True, если А,больше В

True, если А меньше В

Больше или равно

True, если А больше или равно В

Меньше или равно

True, если А меньше или равно В

Сложные условия образуются из простых путем применения логических операций и круглых скобок. Список логических операций приведен в табл. 3.3.

Таблица 3 .3. Логические операции

Название

Выражение

Результат

Логическое
отрицание

Логическое И

Логическое ИЛИ

В условном операторе допустимо использование блока операторов вместо любого из операторов. В этом случае условный оператор имеет вид:

If УСЛОВИЕ Then

БЛОК_ОПЕРАТОРОВ_1

БЛОК_ОПЕРАТОРОВ_2

End I f

В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:

If УСЛОВИЕ_1 Then

БЛОК_ОПЕРАТОРОВ_1

ElseIf УСЛОВИЕ_2 Then

БЛОК_ОПЕРАТОРОВ_2

Else

End If

Пример 1 . Написать часть программы для алгоритма на рис. 3.3.

Пример 2. Написать часть программы для алгоритма на рис. 3.4.

3.5. Оператор выбора Select Case

Оператор Select Case удобно использовать, когда в зависимости от значения некоторого выражения, имеющего конечное множество допустимых значений, необходимо выполнить разные действия. Он также относится к условным операторам, но имеет другой вид:

Select Case ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ

Case ЗНАЧЕНИЯ_1

ОПЕРАТОРЫ_1

Case ЗНАЧЕНИЯ _ 2

ОПЕРАТОРЫ _ 2

. . .

Case ЗНАЧЕНИЯ_N

ОПЕРАТОРЫ _N

[ Case Else

ИНАЧЕ _ ОПЕРАТОРЫ]

End Select

ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ может иметь любой скалярный тип, кроме вещественного. ЗНАЧЕНИЯ состоят из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.

Тип ЗНАЧЕНИЙ должен совпадать с типом ПРОВЕРЯЕМОГО_ВЫРАЖЕНИЯ .

Сначала вычисляется ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ . Если его значение совпадает с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ОПЕРАТОРЫ_I End Select . Если его значение не совпадает ни с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ИНАЧЕ_ОПЕРАТОРЫ и управление передается оператору, стоящему после End Select

Например. Написать часть программы для алгоритма на рис. 3.5, определяющего значение переменной S в зависимости от значения переменной n.

3.6. Операторы цикла

Для реализации циклического вычислительного процесса, т. е. многократного выполнения одного или нескольких операторов, служит оператор цикла For…Next , который имеет следующий синтаксис:

For СЧЕТЧИК=НАЧ_ЗНАЧЕНИЕ Т o КОН_ЗНАЧЕНИЕ Step ШАГ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next СЧЕТЧИК

Цикл For…Next перебирает значения переменной СЧЕТЧИК , которая является параметром цикла, от начального до конечного значения с указанным шагом изменения. При этом обеспечивается выполнение блока операторов тела цикла при каждом новом значении счетчика. Если Step ШАГ в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как СЧЕТЧИК достигнет последнего значения.*

Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For… Each…Next .

For Each Элемент In Группа

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next Элемент

В VBA для организации циклов с неизвестным заранее числом повторений используются и другие операторы цикла:

циклы с предусловием - Do While Loop ,

Do Until Loop ;

циклы с постусловием - Do Loop While ,

Do Loop Until .

Ниже приведен синтаксис этих операторов цикла:

" Цикл с предусловием Do While Loop

Do While УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с предусловием Do Until Loop

Do Until УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с постусловием Do Loop While

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop While УСЛОВИЕ

" Цикл с постусловием Do Loop Until

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop Until УСЛОВИЕ

Оператор Do W hile…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор



Другие новости

Основные операторы языка VBA

Комментарии (0)

3.1. Правила записи операторов

При записи операторов необходимо придерживаться следующих правил:

Каждый новый оператор записывается с новой строки.

Чтобы записать несколько операторов на одной строке, их разделяют между собой двоеточием (:).

Если оператор не помещается в одной строке, то необходимо поставить в конце строки пробел и знак подчеркивания (_), а затем продолжить не поместившуюся часть на следующей строке.

3.2. Оператор присваивания

Оператор присваивания используется, если какой-то переменной нужно присвоить новое значение. Он имеет следующий синтаксис:

ИМЯ_ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ

Сначала вычисляется выражение в правой части, а затем результат присваивается переменной, стоящей в левой части.

Например . Записать с помощью оператора присваивания следующее математическое выражение:

На VВА это выражение можно записать в виде следующего оператора:

Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

3 .3. Операторы ввода-вывода

3 .3.1. Оператор и функция MsgBox

Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.

Он имеет следующий синтаксис:

MsgBox Сообщение[,Кнопки][, Заголовок]

Аргументы:

Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком & . Использование в этом аргументе Chr(13) приводит к переходу на новую строку при выводе информации.

Кнопки - значение этого аргумента определяет категории появляющихся в окне кнопок. От значения аргумента кнопкизависит также, появляется ли в окне какой-либо значок. Если не указано, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке ОК. В табл. 3.1 приведены возможные комбинации кнопок и значков в окне сообщений.

Заголовок - задает заголовок окна.

Функция MsgBox возвращает значение типа Integer, указывающее, какая кнопка была нажата в диалоговом окне.

Таблица 3.1. Допустимые значения переменной кнопки

Отображение

Аргумент

Кнопка ОК

Кнопки ОК и Отмена

Кнопки Да и Нет

Кнопки Да, Нет и Отмена

Кнопки Прекратить, Повторить и Игнорировать

VbAbortRetryIgnore

Кнопки Повторить и Отмена.

Информационный знак

Знак вопроса

Знак восклицания

Например . Вывести сообщение о текущей дате.

MsgBox "Сегодня на календаре" & Date , "Внимание"

В результате будет выведено следующее окно (рис.3.1).

После щелчка по кнопке ОК окно сообщения закроется, и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом MsgBox.

3.3.2. Функция InputBox

Функция InputBox осуществляет ввод значений переменных с помощью окна ввода и имеет следующий синтаксис:

Имя_Переменной = InputBox(Сообщение[, Заголовок ] )

Аргументы:

Сообщение - обязательный аргумент. Задает в окне информационное сообщение, обычно поясняющее смысл вводимой величины

Заголовок - задает заголовок окна.

Например , Ввести значение переменной N с клавиатуры, предусмотрев значение по умолчанию равное 10.

Для этого можно использовать следующий оператор:

N = InputBox("Введите N", "Ввод исходных данных",10)

В результате будет выведено следующее окно для ввода значения переменной N (рис.3.2).

Если значение по умолчанию подходит пользователю, то после щелчка кнопки ОК окно ввода закроется, переменной N присвоится значение 10 и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом InputBox .

Если же значение по умолчанию не подходит пользователю, то перед щелчком по кнопке ОК необходимо ввести нужное значение переменной N.

3 .4. Условный оператор IF

Для реализации разветвляющегося вычислительного процесса в VBA используется оператор If…Then…Else, который представляет собой простейшую форму проверки условий. Он имеет следующий синтаксис:

If УСЛОВИЕ Then ОПЕРАТОР_1 E lse ОПЕРАТОР_2

ОПЕРАТОР_1 выполняется, если УСЛОВИЕ истинно, в противном случае выполняется ОПЕРАТОР_2 . При этом оператор If…Then…Else записывается в одну строку.

УСЛОВИЕ - это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 3.2.

Таблица 3 .2. Логические отношения

Операция

Название

Выражение

Результат

True, если А равно В

True, если А не равно В

True, если А,больше В

True, если А меньше В

Больше или равно

True, если А больше или равно В

Меньше или равно

True, если А меньше или равно В

Сложные условия образуются из простых путем применения логических операций и круглых скобок. Список логических операций приведен в табл. 3.3.

Таблица 3 .3. Логические операции

Название

Выражение

Результат

Логическое
отрицание

Логическое И

Логическое ИЛИ

В условном операторе допустимо использование блока операторов вместо любого из операторов. В этом случае условный оператор имеет вид:

If УСЛОВИЕ Then

БЛОК_ОПЕРАТОРОВ_1

БЛОК_ОПЕРАТОРОВ_2

End I f

В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:

If УСЛОВИЕ_1 Then

БЛОК_ОПЕРАТОРОВ_1

ElseIf УСЛОВИЕ_2 Then

БЛОК_ОПЕРАТОРОВ_2

Else

End If

Пример 1 . Написать часть программы для алгоритма на рис. 3.3.

Пример 2. Написать часть программы для алгоритма на рис. 3.4.

3.5. Оператор выбора Select Case

Оператор Select Case удобно использовать, когда в зависимости от значения некоторого выражения, имеющего конечное множество допустимых значений, необходимо выполнить разные действия. Он также относится к условным операторам, но имеет другой вид:

Select Case ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ

Case ЗНАЧЕНИЯ_1

ОПЕРАТОРЫ_1

Case ЗНАЧЕНИЯ _ 2

ОПЕРАТОРЫ _ 2

. . .

Case ЗНАЧЕНИЯ_N

ОПЕРАТОРЫ _N

[ Case Else

ИНАЧЕ _ ОПЕРАТОРЫ]

End Select

ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ может иметь любой скалярный тип, кроме вещественного. ЗНАЧЕНИЯ состоят из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.

Тип ЗНАЧЕНИЙ должен совпадать с типом ПРОВЕРЯЕМОГО_ВЫРАЖЕНИЯ .

Сначала вычисляется ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ . Если его значение совпадает с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ОПЕРАТОРЫ_I End Select . Если его значение не совпадает ни с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ИНАЧЕ_ОПЕРАТОРЫ и управление передается оператору, стоящему после End Select

Например. Написать часть программы для алгоритма на рис. 3.5, определяющего значение переменной S в зависимости от значения переменной n.

3.6. Операторы цикла

Для реализации циклического вычислительного процесса, т. е. многократного выполнения одного или нескольких операторов, служит оператор цикла For…Next , который имеет следующий синтаксис:

For СЧЕТЧИК=НАЧ_ЗНАЧЕНИЕ Т o КОН_ЗНАЧЕНИЕ Step ШАГ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next СЧЕТЧИК

Цикл For…Next перебирает значения переменной СЧЕТЧИК , которая является параметром цикла, от начального до конечного значения с указанным шагом изменения. При этом обеспечивается выполнение блока операторов тела цикла при каждом новом значении счетчика. Если Step ШАГ в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как СЧЕТЧИК достигнет последнего значения.*

Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For… Each…Next .

For Each Элемент In Группа

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next Элемент

В VBA для организации циклов с неизвестным заранее числом повторений используются и другие операторы цикла:

циклы с предусловием - Do While Loop ,

Do Until Loop ;

циклы с постусловием - Do Loop While ,

Do Loop Until .

Ниже приведен синтаксис этих операторов цикла:

" Цикл с предусловием Do While Loop

Do While УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с предусловием Do Until Loop

Do Until УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с постусловием Do Loop While

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop While УСЛОВИЕ

" Цикл с постусловием Do Loop Until

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop Until УСЛОВИЕ

Оператор Do W hile…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор



Другие новости

The IF function in VBA is one of the most frequently used of all statements. The IF function checks if the specified condition is being met or not. The IF function in VBA works in a slightly different manner from how it works in Excel. In Excel, the IF function does two things: It checks whether the given condition evaluates to TRUE or FALSE and then returns a value to use based on the evaluation i.e IF(condition, return_value_if_condition_true, return_value_if_condition_false ). However, the IF function in VBA does only the first part, i.e. check if the condition evaluates to TRUE or FALSE. The steps to take in either scenario as specified using the additional THEN statement.

Using a simple IF function in VBA

Here’s an example of the IF function . This piece of VBA code is simply checking whether the condition specified (i.e. 1 > 4) evaluates to TRUE or FALSE. In this case, we have only specified the steps to be completed when the condition evaluates to TRUE. In this case, the result will be a being displayed on the screen. If the function were to evaluate to FALSE, the VBA code will do nothing.

1
2
3
4
5

Sub IF_FUNCTION()
If 7 > 1 Then
MsgBox "7 is greater than 1"
End If
End Sub

The THEN statement is essentially a directive indicating that the steps immediately following it are to be executed if the condition just before if evaluate to TRUE.

The IF function typically ends with an END IF declaration which lets the application know that it is the last line of the IF function. Given below is a slightly shorter form of the IF function. Note that the END IF statement has been eliminated in this and thus three lines of code has been merged into one.

Sub IF_FUNCTION_SHORT()
If 7 > 1 Then MsgBox "7 is greater than 1"
End Sub

However this form should be used only when there are no ELSE or ELSE IF statements are needed. Let’s look at what they are and how they help enhance the IF function.

Using a IF function with ELSE in VBA

In the example given above, we saw that the IF function would be able to carry out steps only if the condition evaluated to TRUE. But what if we wanted to specify the steps to be carried out when either of the conditions were met. One way to achieve branching out of an IF function is to use the ELSE statement. Simply put, the ELSE statement causes the application to execute the steps mentioned in the ELSE block when the condition specified in the IF clause evaluates to FALSE.

In the VBA code example below, the condition in the IF function evaluates to false, the steps mentioned in the ELSE block are executed with the result that the message “1 is less than 4” gets displayed on the screen. Multiple steps can be added to the block to have them all execute one after another.

1
2
3
4
5
6
7

Sub IF_ELSEIF_FUNCTION()
If 1 > 4 Then

Else :
MsgBox "1 is less than 4"
End If
End Sub

Using a IF function with ELSEIF and ELSE: in VBA

The ELSE statement may be supported by ELSEIF statements. They are typically used to check for specific conditions and if all of them evaluate to FALSE, the steps specified in the ELSE condition will finally get executed. The IF statement will check for a given condition. If that condition turns out to be FALSE, the condition specified in the first ELSEIF statement will be checked. If that also turns out to be FALSE, the condition specified in the second ELSEIF statement will be checked, and so on and so forth. If all conditions specified in the IF and ELSEIF statements turn out to be FALSE, by default the steps mentioned under the final ELSE: block will get executed. Please remember that if there are multiple ELSEIF statements, the first one that evaluates to TRUE will get executed and once completed, the code execution will move to the END IF statement. Even if there are multiple ELSEIF conditions that evaluate to TRUE, only the first one that evaluates to TRUE will be executed.

1
2
3
4
5
6
7
8
9
10
11


If < > Then
MsgBox "1 is greater than 4"
ElseIf < > Then

ElseIf < > Then

Else < >:

End If
End Sub

In the example shown below, the IF condition is checked first. Since it evaluates to FALSE, the first ELSEIF condition is evaluated, followed by the second. Since none of them evaluate to TRUE, the steps mentioned in the ELSE: condition are executed.

1
2
3
4
5
6
7
8
9
10
11

Sub IF_ELSEIF_ELSE_FUNCTION()
If 1 > 4 Then
MsgBox "1 is greater than 4"
ElseIf 2 > 4 Then
MsgBox "2 is greater than 4"
ElseIf 3 > 4 Then
MsgBox "3 is greater than 4"
Else :
MsgBox "1, 2 or 3 are lesser than 4"
End If
End Sub

Quick Tip – How to make IF statements work faster

Both the pieces of code appear similar. The two ELSEIF conditions in the second function have been swapped. Which one of the following pieces of VBA code do you think executes faster?:
End If
Next i
MsgBox Timer - t
End Sub

The answer is that the second one executes much faster than the first. Why? Because the second one needs to application to go through lesser lines of code before it finds a condition that evaluates to TRUE. Remember that the first ELSEIF condition that if found TRUE gets executed and none of the other conditions are evaluated, even if they were to also evaluate to TRUE. In the first piece of the VBA code, the ELSEIF function on line 6 evaluates to TRUE while in the second, line 5 meets the criteria. In essence, the more likely the condition is to get evaluated to TRUE, the earlier it should be placed in the VBA code, all else being the same.

Условный оператор

Условный оператор VBA позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор – это средство ветвления вычислительного процесса.

В VBA существует 2 типа условного оператора: линейный и блочный.

1. Линейный условный оператор используется для того, чтобы выполнить какой-либо один оператор, если некоторое условие будет истинным.

Синтаксическая конструкция линейного оператора имеет две формы: безальтернативную, альтернативную.

Структура безальтернативного условного оператора (сокращенный вариант):

If <условие> Then <оператор 1>

Структура альтернативного условного оператора (полный вариант):

If <условие> Then <оператор 1> Else <оператор 2>

где

If , Then , Else - зарезервированные слова (если, то, иначе);

<условие> - произвольное выражение логического типа;

<оператор 1>, <оператор 2> - любые операторы языка VBA .

Работа. Вначале вычисляется условное выражение <условие>. Если результат есть True (истина), то выполняется <оператор 1>, а <оператор 2> пропускается. Если результат есть False (ложь), наоборот, <оператор 1> пропускается, а выполняется <оператор 2>.

2. Блочный условный оператор используется в случае истинности условия необходимо выполнить несколько программных операторов (блок операторов). Блочный оператор имеет две формы: безальтернативный, альтернативный.

Структура безальтернативного блочного оператора (сокращенный вариант )

If <условие> Then

<оператор1>

<оператор2>

…………….

<оператор n >

End If

где

End If - указывает на окончание блока оператора If .

Структура альтернативного блочного оператора:

If <условие> Then

<оператор1>

<оператор2>

…………….

<оператор n >

Else

<оператор1>

<оператор2>

…………….

<оператор n >

End If

Пример 1.

Постановка задачи. Создать в стандартном модуле пользовательскую процедуру вычисления уравнения вида ax 2 + bx + c = 0.

1. Исходные данные:

a , b , c  R

Результат: х1, х2  R .

2.Набрать в стандартном модуле проекта следующую пользовательскую процедуру:

Private Sub yravnenie ()

a = InputBox("a=", a)

b = InputBox("b=", b)

c = InputBox("c=", c)

d = b ^ 2 - 4 * a * c

If d >= 0 Then

x1 = (-b + Sqr(d)) / (2 * a)

x2 = (-b - Sqr(d)) / (2 * a)

MsgBox (x1)

MsgBox (x2)

Else

MsgBox (" Решений нет ")

End If

End Sub

Альтернативный блочный оператор If применяется в тех случаях, когда при выполнении условия необходимо осуществить один набор программных операторов, а при невыполнении – другой.

Операторы IF могут быть вложенными друг в друга. Такое вложение операторов применяется, если нужно проверить какое-либо условие при другом условии, которое является истинным.

Формат вложенного оператора If :

If <условие1> Then

If <условие2> Then

<оператор1>

<оператор2>

…………….

<оператор n >

Else

<оператор1>

<оператор2>

…………….

< оператор n>

End If

End If

Пример 2.

Постановка задачи. Создать в стандартном модуле пользовательскую функцию нахождения максимального среди трех заданных чисел y 1 = a +2* b ; y 2 = a * b + c ; y 3 = c 2 + 1.

Технология выполнения задания:

1. Исходные данные:

a , b , c  R

Результат: Max  R.

2.Набрать в стандартном модуле проекта следующую пользовательскую функцию:

Function y (a,b,c)

y1 = a+2*b

y2 = a*b+c

y3 = c^2+1

If y1 > y2 Then

If y1 > y3 Then y = y1 Else y = y3

Else

If y2 > y3 Then y = y2 Else y = y3

End If

End Function

3.Вычислить корни квадратного уравнения при произвольных исходных данных.

При использовании вложенных операторов If важно не перепутать варианты сочетания условий. Нужно помнить правило: альтернатива Else считается принадлежащей ближайшему оператору If , не имеющему ветви Else .

В VBA предусмотрена конструкция для работы с несколькими операторами If . Эти операторы применяются в случаях, когда необходимо рассмотреть еще несколько условий в дополнение к исходному. Для этого служит конструкция: If … Then … ElseIf . В отличие от вложенных операторов конструкция с несколькими операторами If позволяет проверить дополнительное условие, если исходное условие принимает значение False .

Формат записи:

If <условие1> Then

<оператор1>

ElseIf <условие2> Then

<оператор2>

Else

<.оператор3>

EndIf

Пример 3.

Постановка задачи. Менеджеру по продажам необходимо разработать функцию, позволяющую рассчитывать комиссионные. Процент комиссионных зависит от объема проданного товара и начисляется по следующему правилу, представленному в таблице 15.

Правила расчета комиссионных

Объем продаж за неделю, р.

Комиссионные, %

От 0 до 9999

От 10000 до 19999

От 20000 до 39999

Более 40000

Технология выполнения задания:

1. Исходные данные:

Продажи  Z .

Результат: Комиссионные  R .

2. Построить для расчета комиссионных в стандартном модуле пользовательскую функцию:

Function Комиссионные (Продажи)

If Продажи <= 9999 Then

Комиссионные = Продажи * 0.08

ElseIf Продажи <= 19999 Then

Комиссионные = Продажи * 0.1

ElseIf Продажи <= 39999 Then

Комиссионные = Продажи * 0.12

Else

Комиссионные = Продажи * 0.14

End If

End Function

3. Вычислить.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то