Добавил:
Меня зовут Катунин Виктор, на данный момент являюсь абитуриентом в СГЭУ, пытаюсь рассортировать все файлы СГЭУ, преобразовать, улучшить и добавить что-то от себя Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика / Ответы / ответы по информатике.не все....doc
Скачиваний:
29
Добавлен:
02.08.2023
Размер:
2.1 Mб
Скачать

Вопрос 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.

Соседние файлы в папке Ответы