
- •Вопрос 1.
- •Вопрос 2.
- •Вопрос 3.
- •Вопрос 4.
- •Вопрос 5.
- •Вопрос 6.
- •Вопрос 7.
- •Вопрос 8.
- •Вопрос 9.
- •Вопрос 10.
- •Вопрос 11.
- •Вопрос 12.
- •13. Работа с циклами.
- •Вопрос 14.
- •Вопрос 15.
- •Вопрос 16.
- •Вопрос 17.
- •Процессор
- •Системная шина
- •Основная память
- •Внешняя память .
- •Внешние устройства
- •Вопрос 18.
- •Функциональные направления
- •Вопрос 19.
- •Вопрос 20.
- •Виды мониторов
- •Вопрос 21.
- •Вопрос 22.
- •Вопрос 23.
- •Вопрос 24.
- •Вопрос 25
- •Вопрос 26.
- •Вопрос 27.
- •Вопрос 28
- •Вопрос 29.
- •Вопрос 30.
- •Вопрос 33
- •Вопрос 34.
- •Вопрос 35.
- •Вопрос 36.
- •Вопрос 37.
- •Вопрос 38.
- •Вопрос 39.
- •Вопрос 40.
- •Vba. Панель элементов управления.
- •Вопрос 41.
- •Vba. Создание экранных форм.
- •Вопрос 42
- •Вопрос 44.
- •Вопрос 45.
- •Вопрос 46.
- •Vba. Операторы циклов.
- •Вопрос 47.
- •Vba. Общие сведения о языке программирования для приложения Excel.
- •Вопрос 48.
- •Vba. Типы данных. Синтаксис программного кода.
- •Вопрос 49.
- •Вопрос 50.
- •Vba. Операторы условия.
Вопрос 12.
Использование структур с условиями.
Для реализации алгоритма ветвления в VBA предусмотрены команды, изменяющие последовательность выполнения программы в зависимости от результатов проверки информации на некотором этапе программы. Выбор команды, наиболее подходящей для реализации ветвления в Вашем случае можно провести, руководствуясь таблицей 11.4, однако жестких требований нет, поскольку в ряде ситуаций эти команды взаимозаменяемы.
Таблица 11.4
Принцип выбора команды ветвления.
Команда |
Условия применения |
If Then |
Единственное условие в полном алгоритме ветвления. |
If Then Else |
Единственное условие в полном алгоритме ветвления. |
If Then ElseIf |
Проверка нескольких условий, для каждого из которых свой блок действий. |
Select Case |
Проверка единственного выражения, которое может принимать различные значения. |
Условный оператор If проверяет некоторое заданное логическое выражение и, если оно выполнилось (ИСТИНА), управление передается набору команд, следующих непосредственно за условием после ключевого слова Then . Если результат проверки ЛОЖЬ, то может выполняться иной набор команд, следующих за ключевым словом Else.
Синтаксис команды предусматривает однострочную и блочную формы.
Однострочная форма.
If <условие> Then < набор команд > [Else < набор команд >]
Условие – это выражение сравнения. Обязательно присутствие знаков
=, <>, >, >=, <, <=.
Несколько выражений могут объединяться логическими командами and (и), or (или), not (не).
Набор команд после ключевого слова Then обязателен. Это команды, выполняемые при соблюдении выше заданного условия.
Набор команд после ключевого слова Else необязателен. Это команды, выполняемые при несоблюдении выше заданного условия, если такие команды нужны. После слова Else команды проверки недопустимы.
Вспомните, разве команда If не напоминает Вам функцию MS Excel
=ЕСЛИ(<усл.>; <д1>; <д2>)?
Однострочная форма допускает выполнение нескольких команд в результате проверки одного условия If...Then, но все команды должны находиться на одной строке и разделяться двоеточием.
Пример.
A=4: B=8
If A > B Then C = A Else C = B ' В наборе единственная команда.
If C > B Then Z = A: D = B Else Z = A + B: D = A ' В наборе 2 команды.
If A > B And A > 0 Then C = A ' Сложное условие, Else отсутствует.
Блочная форма.
Блочная форма обеспечивает более структурированный подход и большую гибкость по сравнению с однострочной формой. Блочная форма обычно проще для чтения, обработки и отладки.
If <условие> Then
<набор команд>
[Else
< набор команд>]
End If
Обратите внимание, что после ключевых слов Then и Else в той же строке команды писать нельзя! Поскольку команда If в блочной форме занимает несколько строк, ключевое слово End If служит признаком завершения команды ветвления.
Пример.
Пусть переменным A, B, C, и D были присвоены значения в начальной части программы. Если A окажется больше B, C меньше D и все они положительные, то 1, 5, 20 и 50 элементам массива М1 следует присвоить значение 55, а если любое из указанных условий неверно, то в 1 и 50 элементы массива следует записать 33, а в 5 и 20 записать 99.
Dim M1(50) As Integer
…
If A > B And C < D And A > 0 And B > 0 And C > 0 And D > 0 Then
M1(1) = 55: M1(5) = 55
M1(20) = 55: M1(50) = 55
Else
M1(1) = 33: M1(50) = 33
M1(5) = 99: M1(20) = 99
End If
Вы прекрасно понимаете, что многообразие ситуаций реального мира нельзя уложить в рамки того, выполнилось ли некоторое единственное, пусть даже очень сложное условие или нет. Для множества условий должно быть предусмотрено и соответствующее множество решений. А как Вы в таких случаях действовали в MS Exel? Формула принимала вид:
=ЕСЛИ(<усл.1>;<д.1>;<ЕСЛИ(<усл.2>;<д2>;< д3>)).
Подобный синтаксис и у команды, реализующей сложное ветвление в VBA.
Если условий несколько и их нельзя разделить по принципу выполнились – не выполнились, а приходится проверять постепенно, применяется условие ElseIf, причем в каждую последующую проверку попадают только значения, не отсеянные предыдущими проверками.
Количество вложенных наборов ElseIf практически не ограничено.
If <условие> Then
<набор команд>
ElseIf<условие> Then
< набор команд>
[Else
< набор команд>]
End If
Допускаются вложенные блоки инструкций If; то есть блоки If, содержащиеся в других блоках.
Пример 1.
Пусть в переменной N содержится некоторое целое число, соответствующее номеру зажженного фонаря светофора (отсчет сверху вниз). В переменную Colr (слово Color – зарезервированное в VBA) следует внести соответствующий фонарю цвет.
If N = 1 Then
Colr = "Красный"
ElseIf N = 2 Then
Colr = "Желтый"
ElseIf N = 3 Then
Colr = "Зеленый"
Else
Colr = "Не бывает!"
End If
Для обращения к ячейке электронной таблицы используется функция Сells(i, j), где i - номер строки, ,j – номер столбца. |
|
Пример 2.
В ячейку B4 текущего листа внесено целое число A. В ячейку С4 внести значение Z исходя из условия: |
A = Cells(4, 2) If A < 0 Then z = A ^ 2 ElseIf A < 10 Then ' Здесь уже только положительные z = 33 ElseIf A = 10 Then z = z/2 Else z = A ^ 0.5 End If Cells(4, 3) = z |
||
Z = |
|
Z2 , если A < 0 33, если 0≤ A <10 Z/2, если A =10 √Z, если A >10 |
Обратите внимание, что во втором условии проверка на A ≥ 0 не требуется, поскольку все величины A < 0 отсеялись в первом условии.
При рассмотрении очень многих условий, конструкция ElseIf становится излишне громоздкой. Попробуйте воспользоваться командой Select Case.
Если в команде If последовательно ведется проверка различных условий, то Select Case во всей команде проверяется единственное выражение, которое может принимать различные значения.
Select |
Case |
<Выражение> |
|
Case |
<Значение 1> |
|
|
<набор команд 1> |
|
Case |
<Значение 2> |
|
|
<набор команд 1> |
|
Case |
<Значение N> |
|
|
<набор команд N> |
|
[Case Else] |
|
|
<набор команд N+1>] |
|
End Select |
|
<Выражение>, определенное после Select Case - любое числовое или строковое выражение.
Если значение <Выражения> совпадает с любым <Значением i>, где i=1, 2,...n из списка в предложениях Case, выполняются все инструкции, следующие за данным предложением Case до следующего предложения Case. Затем управление передается инструкции, следующей за End Select. Если выражение совпадает со <Значением i> из списка в нескольких предложениях Case, выполняется только первый подходящий набор инструкций.
Необязательный элемент команды Case Else применяется для выполнения набора команд, срабатывающего, если не сработал ни один из выше оговоренных выражений Case.
В каждом предложении Case указываются возможные значения для <Выражения> из Select Case, но не указывается само <Выражение>. Обратите внимание, что для <Значения i> в каждом предложении Case - допускается использование нескольких выражений или диапазонов. Допустимы следующие конструкции (одной или нескольких форм одновременно, перечисленных через запятую):
числовое или литерное выражение;
диапазон значений в виде <Выражение 1> to <Выражение 2>;
is <оператор сравнения> <Выражение 3>.
Оператор сравнения – это >, < и т.п. Если ключевое слово Is не указано, оно вставляется по умолчанию.
Если продолжать аналогию с функциями MS Excel, то команда Select Case более всего похожа на функцию =ВПР(…)
Пример 1.
Программа «Светофор», рассмотренная в команде If … ElseIf, примет вид:
Select Case A
Case 1
Colr = "Красный"
Case 2
Colr = "Желтый"
Case 3
Colr = "Зеленый"
Case Else
Colr = "Не бывает"
Err1 ="Введите цифру от 1 до 3!"
End Select
Пример 2.
В ячейку A1 текущего листа внесено целое число. В ячейку С4 внести значение Z исходя из условия: |
Select Case Cells(1, 1) Case Is < 0 z = Cells(1, 1) ^ 2 Case 1, 3, 5 To 10 z = 33 Case 0 To 20 'Без лишних проверок. z = 55 Case Is > 20 z = Cells(1, 1) / 2 End Select |
||
Z = |
|
Z2 , если A < 0 33, если A={1,3,5-10} 55, если A={0,2,4,11-20} Z/2, если A >20 |
Обратите внимание, что вместо предложения Case 0, 2, 4, 11 To 20 используется более простое предложение Case 0 To 20, поскольку значения 1, 3, 5-10 были проверены в предыдущем предложении Case.