
- •Ввод и вывод информации
- •Функция InputBox
- •Функция MsgBox
- •Допустимые значения аргумента buttons
- •Возвращаемые функцией значения
- •Организация ветвлений Инструкция If...Then...Else
- •Инструкция Select Case
- •Циклы в программе
- •Использование условных инструкций
- •Типы циклов
- •Инструкция For...Next
- •Инструкция For Each...Next
- •Инструкция Do...Loop
- •Повторение инструкций, пока условие имеет значение True
- •Повторение инструкций, пока условие не примет значение True
- •Выход из цикла Do...Loop
Инструкция Select Case
Для облегчения чтения программы вместо многократно вложенных инструкций If...Then...Else иногда предпочтительнее использовать инструкцию Select Case.
Инструкция Select Case выполняет одну из нескольких групп инструкций в зависимости от значения выражения.
Синтаксис:
Select Case выражение
[Case списокВыражений-n
[инструкции-n]] ...
[Case Else
[инструкции_else]]
End Select
Синтаксис инструкции Select Case содержит следующие элементы:
выражение - обязательный элемент. Любое числовое выражение или строковое выражение;
списокВыражений-n - обязательный элемент при наличии предложения Case. Список с разделителями, состоящий из одной или нескольких форм следующего вида: выражение, выражение To выражение, Is оператор_Сравнения выражение. Ключевое слово To задает диапазон значений. При использовании ключевого слова To перед ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения (кроме Is и Like) задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по умолчанию;
инструкции-n - необязательный элемент. Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка списокВыражений-n;
инструкции_else - необязательный элемент. Одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает ни с одним из предложений Case.
Алгоритм работы оператора: если выражение совпадает с любым выражением из спискаВыражений в предложении Case, выполняются все инструкции, следующие за данным предложением Case до следующего предложения Case, или, для последнего предложения, до инструкции End Select. Затем управление передается инструкции, следующей за End Select. Если выражение совпадает с выражениями из списка в нескольких предложениях Case, выполняется только первый подходящий набор инструкций.
Предложение Case Else задает список инструкции_else, которые будут выполнены, если не обнаружено ни одно совпадение выражения и компонента списокВыражений ни в одном из остальных предложений Case. Данное предложение не является обязательным, однако, рекомендуется помещать предложение Case Else в блок Select Case, чтобы предусмотреть неожиданные значения выражения. Если ни в одном предложении Case списокВыражений не содержит компонента, отвечающего аргументу выражения, и отсутствует инструкция Case Else, выполнение продолжается с инструкции, следующей за инструкцией End Select.
В каждом предложении Case допускается использование нескольких выражений или диапазонов. Например, допустима следующая строка:
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
Имеется также возможность задать диапазоны или несколько выражений для строковых значений.
В следующем примере предложение Case выполняется для строк, которые точно совпадают со строкой "все ", для строк, лежащих в алфавитном порядке между "орехи" и "яблоки", и для строк со значением, равных текущему значению переменной TestItem:
Case "все", "орехи" To "яблоки", TestItem
Инструкция Select Case может служить альтернативой инструкции ElseIf в If...Then...Else при оценке одного выражения, которое имеет несколько возможных значений. В то время, как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры.
Пример 5
В данном примере Select Case оценивает значение аргумента Балл. Размер премии вычисляется в соответствии со следующей схемой:
Балл |
Размер премии |
1 |
10% |
2,3 |
9% |
от 4 до 8 |
7% |
более 8 |
10 грн |
Function Премия _1(Балл, оклад)
Select Case Балл
Case 1
Премия= оклад* 0.1
Case 2, 3
Премия= оклад* 0.09
Case 4 To 8
Премия= оклад* 0.07
Case Is > 8
Премия= 10
Case Else
Премия= 0
End Select
Премия _1=Премия
End Function
Те же действия можно реализовать, используя условный оператор If..Then…Else.
Function Премия _2(Балл, оклад)
If Балл= 1 Then
Премия= оклад* 0.1
ElseIf Балл= 2 or Балл= 3 Then
Премия= оклад* 0.09
ElseIf Балл>=4 and Балл<= 8 Then
Премия= оклад* 0.07
ElseIf Балл>8 Then
Премия= 10
Else
Премия= 0
End If
Премия_2=Премия
End Function
Пример 6
Функция, возвращающая одну из трех текстовых строк в зависимости от заданного аргумента. Если значение Val отрицательно переменной NumSign присваивается текстовое значение «минус», в случае нулевого значения – текст «нуль», если же Val положительное, то NumSign присваивается значение «плюс»
Function NumSign(Val)
Select Case Val
Case Is<0
NumSign =”минус”
Case 0
NumSign = “нуль”
Case Is > 0
NumSign = “плюс”
End Select
End Function
Пример 7
Функция, вычисляющая комиссионные, начисляющиеся по следующему правилу:
если продукции продано не меньше, чем на 1 000 грн, то комиссионные составляют 2% от стоимости реализованной продукции;
если продукции продано меньше, чем на 1 000 грн, то комиссионные составляют 1% от стоимости реализованной продукции;
если стаж работы в фирме не меньше 5 лет, то выплачивается доплата в размере 0,5% от стоимости реализованной продукции.
Первый способ составления функции.
Function Премия_3(стаж, продажа)
If стаж >= 5 And продажа >= 1000000 Then Премия_3 = 0.025 * продажа
If стаж < 5 And продажа >= 1000000 Then Премия_3 = 0.02 * продажа
If стаж >= 5 And продажа < 1000000 Then Премия_3 = 0.015 * продажа
If стаж < 5 And продажа < 1000000 Then Премия_3 = 0.01 * продажа
End Function
Второй способ составления функции.
Function Премия_4(стаж, продажа)
Dim Age, All_s As Integer
If стаж >= 5 Then Age = 0.005 * продажа
If продажа >= 1000000 Then
All_s = 0.02 * продажа
Else
All_s = 0.001 * продажа
End If
Премия_4 = Age + All_s
End Function
Третий способ составления функции.
Function Премия_5(стаж, продажа)
Dim Age, All_s As Integer
If стаж >= 5 Then Age = 0.005 * продажа
If продажа >= 1000000 Then All_s = 0.02 * продажа _
Else All_s = 0.001 * продажа
Премия_5 = Age + All_s
End Function