Операторы условия в VBA. Методические указания и задания Макрос условие if в условии
Наиболее важные операторы условия, используемые в Excel VBA – это операторы If … Then и Select Case . Оба этих выражения проверяют одно или несколько условий и, в зависимости от результата, выполнят различные действия. Далее мы поговорим об этих двух операторах условия подробнее.
Оператор «If … Then» в Visual Basic
Оператор If … Then проверяет условие и, если оно истинно (TRUE), то выполняется заданный набор действий. Также может быть определён набор действий, которые должны быть выполнены, если условие ложно (FALSE).
Синтаксис оператора If … Then вот такой:
If
Условие1
Then
Действия в случае, если выполняется Условие1
ElseIf
Условие2
Then
Действия в случае, если выполняется Условие2
Else
Действия в случае, если не выполнено ни одно из Условий
End If
В этом выражении элементы ElseIf и Else оператора условия могут не использоваться, если в них нет необходимости.
Ниже приведён пример, в котором при помощи оператора If … Then цвет заливки активной ячейки изменяется в зависимости от находящегося в ней значения:
If ActiveCell.Value < 5 Then ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет ElseIf ActiveCell.Value < 10 Then ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End If
Обратите внимание, что как только условие становится истинным, выполнение условного оператора прерывается. Следовательно, если значение переменной ActiveCell меньше 5, то истинным становится первое условие и ячейка окрашивается в зелёный цвет. После этого выполнение оператора If … Then прерывается и остальные условия не проверяются.
Оператор «Select Case» в Visual Basic
Оператор Select Case схож с оператором If … Then в том, что он также проверяет истинность условия и, в зависимости от результата, выбирает один из вариантов действий.
Синтаксис оператора Select Case вот такой:
Select Case
Выражение
Case
Значение1
Действия в случае, если результат Выражения соответствует Значению1
Case
Значение2
Действия в случае, если результат Выражения соответствует Значению2
…
Case Else
Действия в случае, если результат Выражения не соответствует ни одному из перечисленных вариантов Значения
End Select
Элемент Case Else не является обязательным, но его рекомендуется использовать для обработки непредвиденных значений.
В следующем примере при помощи конструкции Select Case изменяется цвет заливки текущей ячейки в зависимости от находящегося в ней значения:
Select Case ActiveCell.Value Case Is <= 5 ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет Case 6, 7, 8, 9 ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Case 10 ActiveCell.Interior.Color = 65535 "Ячейка окрашивается в жёлтый цвет Case 11 To 20 ActiveCell.Interior.Color = 10498160 "Ячейка окрашивается в лиловый цвет Case Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End Select
В приведённом выше примере показано, как можно различными способами задать значение для элемента Case в конструкции Select Case . Вот эти способы:
Case Is <= 5 | Таким образом при помощи ключевого слова Case Is можно проверить, удовлетворяет ли значение Выражения условию вида <=5 . |
Case 6, 7, 8, 9 | Так можно проверить, совпадает ли значение Выражения с одним из перечисленных значений. Перечисленные значения разделяются запятыми. |
Case 10 | Так проверяется, совпадает ли значение Выражения с заданным значением. |
Case 11 To 20 | Таким образом можно записать выражение для проверки, удовлетворяет ли значение Выражения условию вида от 11 до 20 (эквивалентно неравенству “11<=значение<=20”). |
Case Else | Вот так, при помощи ключевого слова Else , указываются действия для того случая, если значение Выражения не соответствует ни одному из перечисленных вариантов Case . |
Как только одно из условий будет найдено, выполняются соответствующие действия и производится выход из конструкции Select Case . То есть в любом случае будет выполнена только одна из перечисленных ветвей Case .
Основные операторы языка 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 позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор это средство ветвления вычислительного процесса.
В 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. Вычислить.
Однострочная и многострочная конструкции оператора If...Then...Else и функция IIf, используемые в коде VBA Excel - синтаксис, компоненты, примеры.
Оператор If...Then...Else
Оператор If...Then...Else предназначен для передачи управления одному из блоков операторов в зависимости от результатов проверяемых условий.
Однострочная конструкция
Оператор If...Then...Else может использоваться в однострочной конструкции без ключевых слов Else , End If .
Синтаксис однострочной конструкции If...Then...
If [условие] Then [операторы]Компоненты однострочной конструкции If...Then...
- условие True или False ;
- операторы условие возвращает значение True ;
Если компонент условие возвращает значение False , блок операторов конструкции If...Then...
Пример 1
Sub primer1() Dim d As Integer, a As String d = InputBox("Введите число от 1 до 20", "Пример 1", 1) If d > 10 Then a = "Число " & d & " больше 10" MsgBox a End SubМногострочная конструкция
Синтаксис многострочной конструкции If...Then...Else
If [условие] Then [операторы] ElseIf [условие] Then [операторы] ---------------- Else [операторы] End IfКомпоненты многострочной конструкции If...Then...Else :
- условие - числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False ;
- операторы - блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True .
- пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы] ;
- блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен.
Если компонент условие возвращает значение False , следующий за ним блок операторов конструкции If...Then...Else пропускается и управление программой передается следующей строке кода.
Самый простой вариант многострочной конструкции If...Then...Else :
If [условие] Then [операторы] Else [операторы] End IfПример 2
Sub primer2() Dim d As Integer, a As String d = InputBox("Введите число от 1 до 40", "Пример 2", 1) If d < 11 Then a = "Число " & d & " входит в первую десятку" ElseIf d > 10 And d < 21 Then a = "Число " & d & " входит во вторую десятку" ElseIf d > 20 And d < 31 Then a = "Число " & d & " входит в третью десятку" Else a = "Число " & d & " входит в четвертую десятку" End If MsgBox a End Sub
Функция IIf
Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.
Синтаксис функции
IIf ([условие], [если True], [если False])Компоненты функции IIf
- условие - числовое или строковое выражение, возвращающее логическое значение True или False ;
- если True IIf , если условие возвратило значение True ;
- если False - значение, которое возвращает функция IIf , если условие возвратило значение False .
Пример 3
Sub primer3() Dim d As Integer, a As String d = InputBox("Введите число от 1 до 20", "Пример 3", 1) a = IIf(d < 10, d & " - число однозначное", _ d & " - число двузначное") MsgBox a End SubПри нажатии кнопки «Cancel» или закрытии крестиком диалогового окна InputBox из примеров, генерируется ошибка, так как в этих случаях возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d.
Условия являются очень полезными при программировании, поскольку позволяют нам выполнять действия, в зависимости от установленных критериев (используется такой же принцип как и в IF функции Excel).
Наиболее важной функцией, которая задает условие является IF и сейчас мы посмотрим, как она работает:
If [УСЛОВИЕ ЗДЕСЬ] Then "=> ЕСЛИ условие верно, ТОГДА "Инструкции, если "правда" Else "=> В ПРОТИВНОМ СЛУЧАЕ "Инструкции, если "ложь" End If
Давайте перейдем к практике и вернемся к примеру, который мы использовали в уроке с переменными. Цель этой процедуры была в том, чтобы открыть диалоговое окно, которое бы содержало значение из строки, указанного в ячейке F5 :
Если вы введете букву в ячейку F5 , это повлечет ошибку. Мы хотим предотвратить это.
Sub variables () "Декларирование переменных Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Присвоение значений переменным row_number = Range("F5") + 1 last_name = Cells(row_number, 1) first_name = Cells(row_number, 2) age = Cells(row_number, 3) "Диалоговое окно MsgBox last_name & " " & first_name & "," & age & " лет" End Sub
Давайте добавим условие, которое будет проверять - является ли введенное значение в ячейку F5 числом, перед тем, как код будет выполнен.
Мы воспользуемся функцией IsNumeric для проверки условия:
Sub variables () "Если значение в скобках (ячейка F5) является числовым (И ПОЭТОМУ УСЛОВИЕ IF ЕСТЬ ВЕРНЫМ) тогда "выполнить инструкции, которые следуют после THEN If IsNumeric (Range ("F5")) Then "Декларирование переменных Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Присвоение значений переменным row_number = Range ("F5") + 1 last_name = Cells (row_number, 1) first_name = Cells (row_number, 2) age = Cells (row_number, 3) "Диалоговое окно MsgBox last_name & " " & first_name & "," & age & " лет" End If End Sub
Нам также нужно прописать инструкции, если поставленное нами условие не выполнится:
Sub variables () If IsNumeric (Range ("F5")) Then "Если условие выполняется "Декларирование переменных Dim last_name As String, first_name As String, age As Integer, row_number As Integer "Присвоение значений переменным row_number = Range ("F5") + 1 last_name = Cells (row_number, 1) first_name = Cells (row_number, 2) age = Cells (row_number, 3) "Диалоговое окно MsgBox last_name & " " & first_name & "," & age & " лет" Else "Если условие не выполняется "Диалоговое окно: предупреждение MsgBox "Введенное значение " & Range ("F5") & " не является верным!" "Удаление содержимого ячейки F5 Range ("F5").ClearContents End If End Sub
Теперь нечисловое значения не повлечет никаких проблем.
Работая с нашим массивом, который содержит 16 строк данных, наш следующий шаг будет в проверке является ли переменная row_number: "больше чем или равно 2" и "меньше чем или равно 17".
Но сначала взглянем на операторы сравнения:
и эти полезные операторы:
Теперь давайте добавим одно из выше указанных условий AND между операторов сравнения:
Sub variables () If IsNumeric (Range ("F5")) Then "Если числовое значение Dim last_name As String, first_name As String, age As Integer, row_number As Integer row_number = Range ("F5") + 1 If row_number> = 2 And row_number
Если мы хотим сделать наш макрос более практичным, мы можем заменить 17 на переменную, которая бы содержала количество строк. Это бы позволило нам добавлять и удалять строки из массива без необходимости изменять этот лимит каждый раз.
Для того, чтобы сделать это, мы должны создать переменную nb_rows и добавить эту функцию.
В этом случае, мы используем функцию WorksheetFunction.CountA , которая является аналогом функции COUNTA в самом Excel.
Мы хотим, чтобы эта функция подсчитала количество непустых ячеек в первой колонке по записала полученное значение в переменную nb_rows :
Sub variables () If IsNumeric (Range ("F5")) Then "ЕСЛИ ЧИСЛО Dim last_name As String, first_name As String, age As Integer, row_number As Integer Dim nb_rows As Integer row_number = Range ("F5") + 1 nb_rows = WorksheetFunction.CountA (Range ("A:A")) "Функция подсчета количества строк If row_number > = 2 And row_number
ElseIf
ElseIf дает возможность добавлять дополнительные условия после IF команды:
If [УСЛОВИЕ 1] Then "=> ЕСЛИ условие 1 верно, ТОГДА "Инструкции 1 ElseIf [УСЛОВИЕ 2] Then "=> ЕСЛИ условие 1 неверно, но условие 2 верно, ТОГДА "Инструкции 2 Else "=> ИНАЧЕ "Инструкции 3 End If
Если УСЛОВИЕ 1 выполняется, Инструкция 1 будет выполнена и покинет оператор IF (который начинается с IF и заканчивается End If). Если УСЛОВИЕ 2 принимает значение " ложь ", тогда будет выполнена Инструкция 2 , и если она в свою очередь возвращает " ложь ", тогда Инструкция 3 (под Else ) будет выполнена.
Sub scores_comment () "Переменные Dim note As Integer, score_comment As String note = Range ("A1") "Комментарии, основанные на полученной оценке If note = 6 Then score_comment = "Великолепный бал!" ElseIf note = 5 Then score_comment = "Хороший бал" ElseIf note = 4 Then score_comment = "Удовлетворительный бал" ElseIf note = 3 Then score_comment = "Неудовлетворительный бал" ElseIf note = 2 Then score_comment = "Плохой бал" ElseIf note = 1 Then score_comment = "Ужасный бал" Else score_comment = "Нулевой бал" End If "Комментарий в ячейке B1 Range ("B1") = score_comment End Sub
Select
Существует альтернатива использованию If со многими ElseIf инструкциями, а именно команда Select , которая больше подходит к такого рода ситуаций.
Рассмотрим пример макроса с оператором Select :
Sub scores_comment () "Переменные Dim note As Integer , score_comment As String note = Range ("A1") "Комментарии, основанные на полученной оценке Select Case note "
Стоит отметить, что мы также могли использовать и другие операторы сравнения:
Case Is > = 6 "если значение> = 6
Примеры с различными значениями:
Case Is = 6, 7 "если значение = 6 или 7 Case Is 6, 7 "если значение не равно 6 или 7 Case 6 To 10 "если значение = любому числу от 6 до 10