IF-Then_Select_Case
.pdfТеоретические сведения
Условный оператор. Оператор If ... Then
В VBA есть два типа операторов If ... Then — линейный и блочный.
Линейный оператор If ... Then используется для того, чтобы выполнить какой-либо один оператор, если некоторое условие будет истинным. Условие является выражением или функцией, истинность которого оценивается.
Синтаксическая конструкция линейного оператора: If <условие> Then <Оператор_1> Else <Оператор_2>
При значении условия True сначала выполняется Оператор_1, следующее за ключевым словом Then, а затем следующий в последовательности оператор. Если условие принимает значение False, то выражение (следующее за словом Then) не выполняется, а выполняется оператор следующий за Else выражение Оператор_2.
В условном операторе If может отсутствовать Else, тогда оператор называется безальтернативным. Если условие принимает значение True, то выполняется Оператор_1, а затем следующий в последовательности оператор. Если условие принимает значение False, а выполняется следующий оператор.
Альтернативный блочный оператор If применяется в тех случаях, когда при выполнении условия необходимо выполнить один набор программных операторов, а при невыполнении — другой. Это реализуется с помощью оператора If ... Then ... Else, синтаксис которого следующий:
If Условие Then
<<Блок программных операторов, выполняемых при значении условия True>>
Else
<<Блок программных операторов, выполняемых при значении условия False>>
End If
Операторы If могут быть вложенными друг в друга. Такое вложение операторов применяется, если нужно проверить какое-либо условие при другом условии, которое является истинным (например, если фамилия Иванов и он тортовый агент) Формат вложенного оператора If следующий
If условие_1 Then If условие_2 Then
Блок операторов 1
Else
Блок операторов 2
End If
End If
При использовании вложенных операторов If важно не перепутать варианты сочетания условий. Нужно помнить правило: альтернатива Else считается принадлежащей ближайшему оператору If , не имеющему ветви Else .
Оператор безусловного перехода по метке Goto
Операторы передачи управления применяются в программе для реализации безусловных алгоритмических конструкций. Они выполняют переход с одного участка программы на любой другой без какого-либо условия. Оператор перехода имеет следующий вид.
Goto Метка
где GоТо — зарезервированное слово VBA; Метка— одна из меток программы (идентификатор).
Метка — это идентификатор, помещаемый слева от программного оператора и отделенный от него двоеточием.
Следует сказать о том, что для получения хорошего стиля программирования следуем избегать применения оператора GоТо, так как в этом случае ухудшается читаемость и понимание программы.
Задача 6 (алгоритм ветвления). Найти наибольшее из трех чисел a,b и c. Составить
программу.
Решение.
Этап 1. Математическая часть.
Дано: три числа a, b, c.
Найти: наибольшее из трех чисел.
3
Данная задача может быть решена тремя методами.
I метод (Метод двойного сравнивания)
Алгоритм на естественном языке:
1.Ввести a, b, c
2.Если a > b And a > c,
то Вывести a – max, шаг 3, иначе
Если b > c,
то Вывести b – max, шаг 3, иначе Вывести с – max, шаг 3,
3.Конец
Составим блок-схему (рис.13)
|
Начало |
|
|
|
1 |
|
|
|
Ввести a, b, c |
|
|
|
2 |
|
|
Да |
a > b And a > c |
Нет |
|
|
|
|
|
|
|
|
Вывести |
|
Да |
b > c |
Нет |
||
|
|
|
|
|||
|
|
|
|
|||
а - max |
|
|
|
|
|
|
|
|
Вывести |
|
Вывести |
||
|
|
|
||||
|
|
b - max |
|
c - max |
||
|
|
|
|
|
|
|
3
Конец
Рис. 13. Метод двойного сравнивания
III метод (Метод последовательного сравнивания)
Алгоритм на естественном языке:
1.Ввести a, b, c
2.Если a > b то
Если a > c,
то Вывести a – max, шаг 4
4
3. Если b > c,
то Вывести b – max, шаг 4 иначе Вывести с – max, шаг 4
4. Конец
Составим блок-схему (рис.14)
Начало
III мето (Метод
|
1 |
д |
|
Ввести a, b, c |
|
|
2 |
|
Да |
a > b |
Нет |
|
|
b > c |
Нет |
|
|
|
|
|||
|
|
|
3 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Да |
|
|
|
Да |
b > c |
Нет |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вывести |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
a - max |
Вывести |
|
Вывести |
|||||
|
|
|
||||||
|
|
b - max |
|
c - max |
||||
|
|
|
||||||
|
|
|
|
|
|
|
|
|
4
Конец
Рис. 14. Метод последовательно сравнивания
промежуточного сравнивания)
Алгоритм на естественном языке:
1.Ввести a, b, c
2.max = a
3.Если max < b, то max = b
4.Если max < c, то max = c
то Вывести a – max, шаг 4 5. Вывести max
5
Составим блоксхему (рис.15)
Начало
1
Ввести a, b, c
2
max = a
|
|
3 |
|
|
Да |
|
|
|
Нет |
|
max < b |
|||
|
|
|
||
|
|
max=b
|
4 |
|
|
Да |
max>c |
Нет |
|
|
|
|
max = c
5
Вывести b - max
Конец
Рис. 15. Метод промежуточного сравнивания
Этап 2. Ввод данных в таблицу Excel.
В ячейку А1 вводится значение числа a, в ячейку B1 вводится значение числа b, в ячейку C1 вводится значение числа c.
Этап 3. Определение переменных.
Вводятся: a, b, c. Выводятся (результат): max.
Этап 4. Написание процедуры для метода двойного сравнивания.
На рабочем листе Лист1 при помощи Элементов управления создать элемент
Кнопка (СommandBatton1).
6
Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы
управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню
ПКМ Выбрать пункт Свойства → закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки Максимальное число.
Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:
Набирать процедуру на месте курсора:
Private Sub CommandButton1_Click() Dim a, b, c As Single
Dim max As Single ’Ввод данных
a = Range("A1").Value
b = Range("B1").Value
c = Range("C1").Value ’Вычисление
If a > b And a > c Then max = a
Else
If b > c Then max = b
Else max = c
End |
If |
Рис.16 |
End |
If |
|
’Вывод результатов в ячейку B4
Range("B4").Value = "Максимальное число = " & max End Sub
Процедура для Метода последовательного сравнивания.
Private Sub CommandButton2_Click() Dim a, b, c As Single
Dim max As Single Dim max1 As String ’Ввод данных
a = Range("A1").Value
b = Range("B1").Value
c = Range("C1").Value ’Вычисление
If a > b Then
If a > c Then max = a
max1 = "a" GoTo 1
7
End If
End If
If b > c Then max = b
max1 = "b" GoTo 1 Else
max = c max1 = "c" End If
’Вывод результатов в ячейку B5
1: Range("B5").Value = " Максимальное число " & max1 & " = " & max End Sub
Процедура для Метода промежуточного сравнивания.
Private Sub CommandButton3_Click() Dim a, b, c As Single
Dim max As Single ’Ввод данных
a = Range("A1").Value
b = Range("B1").Value
c = Range("C1").Value ’Вычисление
max = a
If max < b Then max = b If max < c Then max = c
’Вывод результатов в ячейку B4
Range("B4").Value = " Максимальное число = " & max End Sub
Этап 5. Выполнение.
Перейти на рабочий лист (View→Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейке В4 появится результат «Максимальное число = 10». (рис.16)
Этап 6. Переименование листа. Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое
Максимальное_чсило, нажать Enter.
Задачи для самостоятельной работы:
Задача 7. Определить если x [a,b], то вычислить y=[x]. Вывести соответствующее сообщение.
8
|
|
|
ì |
|
|
|
|
|
x < |
- π |
|
|
|
|
|
|
x - |
|
6 |
, |
|
||||
|
|
|
|
|
|
|||||||
|
|
|
ï |
|
|
|
|
|
3x, |
|
- π < x £ 0 |
|
|
|
|
|
|
|
|
|
|
|
|||
Задача 8. |
Найти значение функции y в точке x. |
ï sin 2x - |
|
. |
||||||||
y = í |
0.5x |
|
|
|
|
|
|
|||||
|
|
|
ï e |
|
|
, |
0 < |
x |
< 2π |
|
||
|
|
|
ï |
|
|
|
|
x ³ |
2π |
|
|
|
|
|
|
î ln3x, |
|
|
|
Задача 9. Числа a, b, c тогда только тогда являются сторонами треугольника , когда существуют такие положительные числа x, y, z, что
ì a = |
x + |
y |
ï |
y + |
z |
í b = |
||
ï |
x + |
z |
î c = |
Лабораторная работа № ПР3 «Работа с оператором выбора Selet…Case»
Цель работы: научиться работать с оператором выбора Selet…Case.
Теоретические сведения
Оператор Select…Case позволяет сделать выбор из нескольких альтернативных вариантов в зависимости от значения условного выражения.
Синтаксис его следующий:
Select Case Выражение
Case Значение_1
Оператор, выполняемый при совпадении Значения_1 и
Значения Выражения. Case Значение_2
Оператор, выполняемый при совпадении Значения_2 и Значения Выражения.
. . .
Case Значение_N
Оператор, выполняемый при совпадении Значения_N и
Значения Выражения.
End Select
В операторе Select…Case можно использовать операции отношения. Для этого надо включить в выражение ключевое слово Is или ключевое слово To. Ключевое слово Is дает указание компилятору сравнить значение проверяемой переменной со значением выражения, следующею за ключевым словом Is.
Ключевое слово To задает диапазон значений.
Задача 10 (работа с оператором выбора Selet…Case). Написать
программу, которая запрашивает пользователя номер дня недели и выводит соответствующее сообщение: 1 -> «Начало рабочей недели!», 2-4 -> «Середина рабочей недели!», 5 -> «Окончание рабочей недели!», 6-7 -> «Выходной!». В случае, если пользователь укажет недопустимое число, программа должна вывести сообщение «Ошибка ввода данных». Ниже представлен рекомендуемый вид экрана во время работы программы:
9
Введите номер месяца (число от 1 до 7) -> 2 -> Середина рабочей недели!
Решение.
Этап 1. Математическая часть.
Алгоритмически эта задача решается следующим образом. Блок-схема рис.17.
Эту блок-схему можно реализовать в VBA следующим способом:
Private Sub CommandButton3_Click() ‘Декларация переменных
Dim Nd As Integer
Dim Dn As String 'Ввод данных
Nd = InputBox("Введите номер дня недели: ", "Ввод данных") ‘Проверка корректности ввода даных
If Nd <= 0 Or Nd > 7 Then
MsgBox "Ошибка ввода данных", vbOKOnly+vbCritical, "Не корректный ввод даных!"
GoTo 1
End If 'Вычисления If Nd = 1 Then
Dn = "Начало рабочей недели!" Else
If Nd <= 4 Then
Dn = "Середина рабочей недели!" Else
If Nd = 5 Then
Dn = "Окончание рабочей недели!" Else
Dn = "Выходной!" End If
End If
End If
'Вывод результата
MsgBox Dn, vbOKOnly + vbInformation, "Результат" 1: End Sub
10
Начало
Введите номер дня недели Nd
Нет |
Да |
||
|
Nd <1 or Nd >7 |
|
Не корректный |
|
|
|
ввод! |
|
|
|
|
Да
Nd = 1
Нет
Да
Nd = 2 to 4
Нет
Да
Nd = 5
Нет
Да
Nd <= 7
Dn = “Начало рабочей недели!”
Dn = “Середина рабочей недели!”
Dn = “Окончание рабочей недели!”
Dn = “Выходной!”
Вывести
Dn
Конец
Рис.17
Как видите, здесь встречаются вложенные операторы If…Then это может затруднить составление, набор, отладку и чтение программы. Для таких случаев в VBA существует оператор Select…Case.
(!) Самостоятельно напишите алгоритм на естественном языке.
11
Этап 2. Ввод данных в таблицу Excel.
Ввод данных производится при помощи диалогового окна MgxBox (Приложение 2, п.7.2)
Этап 3. Определение переменных.
Вводятся: Nd (тип Integer) – номер дня недели;
Выводятся (результат): Dn (тип String) – сообщение результат.
Этап 4. Написание процедуры.
На рабочем листе Лист1 при помощи Элементов управления создать элемент
Кнопка (СommandBatton1).
Private Sub CommandButton1_Click() ‘Декларация переменных
Dim Nd As Integer
Dim Dn As String 'Ввод данных
Nd = InputBox("Введите номер дня недели: ", "Ввод данных")
‘Проверка корректности ввода даных If Nd <= 0 Or Nd > 7 Then
MsgBox "Ошибка ввода данных", vbOKOnly+vbCritical, "Не корректный ввод даных!"
GoTo 1
End If 'Вычисления Select Case Nd Case 1
Dn = "Начало рабочей недели!" Case 2 To 4
Dn = "Середина рабочей недели!" Case 5
Dn = "Окончание рабочей недели!" Case Is <= 7
Dn = "Выходной!" End Select
'Вывод результата
MsgBox Dn, vbOKOnly + vbInformation, "Результат" 1: End Sub
Этап 5. Выполнение.
Перейти на рабочий лист (View→Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. Ввод данных показан на рис.18. Вывод данных на рис.19.
12