Реализация алгоритмов в среде программирования. Часть 2. Программирование на VBA

Содержание

Слайд 2

Программирование на VBA

Программирование на VBA

Слайд 3

Программирование на VBA

Программирование на VBA

Слайд 4

Структуры разветвлений

Программа на VBA представляет собой последовательность выполняемых друг за другом инструкций,

Структуры разветвлений Программа на VBA представляет собой последовательность выполняемых друг за другом
называемых операторами. Одним из базовых операторов является оператор присваивания, который вычисляет некоторое выражение и присваивает результат переменной или объекту. Однако последовательность выполнения операторов можно контролировать: какие-то операторы пропускать, а какие-то повторять повторно, в зависимости от определенных условий. Для этих целей и используются структуры разветвлений, в последние годы их также называют структурами принятия решений, или структурами управления потоком (Flow Control).

Слайд 5

Структуры разветвлений

Идея структурного подхода состоит в том, что программа представляет собой комбинацию

Структуры разветвлений Идея структурного подхода состоит в том, что программа представляет собой
или вложение друг в друга стандартных структур, причем каждая структура имеет только один вход и только один выход. Войти в структуру, минуя ее вход и выйти из нее минуя ее выход, нельзя, поскольку это существенно усложнит и работу программы и ее отладку.

Слайд 6

Структуры разветвлений

Введем некоторые обозначения. Пусть L и L1 – это некоторое отношение

Структуры разветвлений Введем некоторые обозначения. Пусть L и L1 – это некоторое
(условия), например, a>b или x>0 и т.п. Пусть S, S1, S2 – некоторые действия, например, y=x, или z=k+p и т.д.

Слайд 7

Структура развилки


Структурой развилки (структурой выбора) называется такая структура, которая обеспечивает выбор

Структура развилки Структурой развилки (структурой выбора) называется такая структура, которая обеспечивает выбор
из двух направлений реализуемого процесса. Выбор зависит от условия, имеющегося в данной структуре.
Можно выделит две структуры развилки. Первая из них, назовем ее структурой двойного ветвления (или иначе – стандартное разветвление), применяется, когда имеются две группы действий и структура обеспечивает выбор одной из них. Второй тип структуры развилки, назовем ее упрощенной развилкой (она называется также структурой типа обход, или структурой усеченного разветвления), используется, когда имеется только одна группа действий и структура либо выбирает их, либо пропускает.

Слайд 8

Двойное ветвление

Рассмотрим структуру двойное ветвление:
Если условие L истинно, то будет выполнены действия

Двойное ветвление Рассмотрим структуру двойное ветвление: Если условие L истинно, то будет
S, а если ложны, то – действия S1.
Для программирования структуры может быть использован либо строчный, либо блочный оператор IF. Строчный оператор имеет следующих вид:
IF L THEN S ELSE S1
Этот оператор может быть записан только в одну строку, поэтому если условие L и действие S и S1 громоздкие, или S и S1 составлены из нескольких операторов, то их просто невозможно разместить в одну строке, необходимо воспользоваться конструкцией блочный IF


Вход

L

S

S1

Выход

да

нет

Слайд 9

Двойное ветвление

Полноценную реализацию структуры позволяет осуществить блочный оператор IF, который имеет вид:

Двойное ветвление Полноценную реализацию структуры позволяет осуществить блочный оператор IF, который имеет
IF L THEN
S
ELSE
S1
END IF
Зона действия блочного оператора IF хорошо обозрима, поскольку каждый блочный IF всегда заканчивается ключевыми словами END IF.
После ключевых слов THEN, ELSE и END IF в строке больше ничего нельзя писать. В то же время число операторов в группе S и группе S1 ничем не ограничено, что значительно расширяет возможности блочного оператора IF и существенно облегчает процесс программирования, особенно когда алгоритм содержит сложные условия.


Вход

L

S

S1

Выход

да

нет

Слайд 10

Двойное ветвление

Проиллюстрируем это на примере вложения одной структуры IF в другую такую

Двойное ветвление Проиллюстрируем это на примере вложения одной структуры IF в другую
же структуру IF (пусть вложение необходимо сделать, когда условие L ложно, т.е. при «нет» на блок-схеме).
Программа для этого вложения:
IF L THEN
S
ELSE
IF L1 THEN
S1
ELSE
S2
END IF
END IF


Вход

L

S

S1

Выход

L

S2

да

нет

да

нет

Слайд 11

Двойное ветвление

или
IF L THEN
S
ELSE IF L1 THEN
S1
ELSE
S2
END

Двойное ветвление или IF L THEN S ELSE IF L1 THEN S1
IF
Второй оператор короче на один END IF, но не так нагляден, как левый, в котором каждый IF заканчивается собственным END IF


Вход

L

S

S1

Выход

L

S2

да

нет

да

нет

Слайд 12

Упрощенная развилки

Структура упрощенной развилки показана справа.
В отличие от структуры «двойное ветвление» эта

Упрощенная развилки Структура упрощенной развилки показана справа. В отличие от структуры «двойное
структура содержит не два действия, а одно (S), и это действие либо выполняется (если условие L истинно), либо пропускается (если L ложно). По этой причине структуру такого типа иногда называют структурой «обход».
Строчный оператор для этой структуры имеет вид
IF L THEN S,
а блочный оператор
IF L THEN
S
END IF
Структуры типа «обход» также допускают вложение друг в друга. В блочные операторы можно вкладывать строчные, но при этом надо обеспечивать правильность логики сложных конструкций, и с этой точки зрения наличие ключевых слов END IF позволяет успешно решить эту задачу. Чтобы при программировании не возникало логических противоречий, надо помнить, что ELSE всегда назначается на ближайший IF.


Вход

L

S

Выход

да

нет

Слайд 13

Пример программы на VBA

Рассмотрим следующий пример. Пусть на листе Excel в ячейке

Пример программы на VBA Рассмотрим следующий пример. Пусть на листе Excel в
A1, A2 и A3 введены три различных числа. Требуется в ячейку B1 поместить наибольшее из них.
Напишем на VBA следующий код
Private Sub CommandButton1_Click()
If Range (“A1”»).Value > Range (“А2”).Value Then
If Range(“A1”).Value > Range(“A3”).Value Then
Range(“B1”).Value = Range(“A1”).Value
Else
Range(“B1”).Value = Range(“A3”).Value
End If
Else
IF Range(“A2”).Value > Range (“A3”).Value Then
Range(“B1”).Value = Range (“A2”).Value
Else
Range (“B1”).Value =Range(“A3”).Value
End If
End If
End Sub

Откроем редактор VBA, добавим форму UserForm1, поместим на эту форму командную кнопку CommandButton1, дважды щелкаем на ней и наберем в событийной процедуре этой кнопки данный код. После этого с помощью команды RUN запустим процедуру на выполнение и получим результат.

Слайд 14

Циклические структуры

Циклом называется алгоритм, обеспечивающий повторение заданного набора операторов. Циклы являются

Циклические структуры Циклом называется алгоритм, обеспечивающий повторение заданного набора операторов. Циклы являются
фундаментальной частью любого языка программирования. Практически ни одна программа для решения прикладных задач не может быть создана без использования циклов. Все циклы можно разделить на две группы: циклы, в которых число повторений известно до начала выполнения цикла, - это конструкция For … next, и циклы, в которых число повторений определяется в процессе выполнения цикла (обычно для этого задаются какие-то условия).

Слайд 15

Циклические структуры

К таким циклам относятся следующие конструкции
Do While условие
Операторы
Loop
Do
Операторы
Loop While

Циклические структуры К таким циклам относятся следующие конструкции Do While условие Операторы
условие
Do Until условие
Операторы
Loop
Do
Операторы
Loop Until условие

На VBA реализована также и конструкции цикла для работа с объектами, которая выполняется только в объектно-ориентированных языках:
For Each … Next
В циклах типов «Do While условие» и «Do Until условие» условие окончания цикла проверяется до начала выполнения операторов цикла, и такие циклы, вообще говоря, могут не выполняться ни разу. Например, если цикл предназначен для чтения записей файла, а в файле нет записей, то условие окончания цикла это обнаружит и цикл не будет выполняться.
В двух других конструкциях условие проверяется в конце, и такой цикл обязательно должен быть выполнен по крайней мере один раз, поэтому его нежелательно применять для операции чтения файлов.
Рассмотрим пример использования циклов.

Слайд 16

Примеры программы с циклами на VBA

Пусть на Лист 1 (Sheet1) записана таблица,

Примеры программы с циклами на VBA Пусть на Лист 1 (Sheet1) записана
в которой указан средний балл студентов. Требуется окрасить светло-зеленым цветом те строки таблицы, в которых средний бал больше 4. Для этого напишем для процедуры элемента CommandButton1 следующий код:
Private Sub CommandButton1_Click( )
Dim I, n As Integer
n=Cint (InputBox(“n=“))
For i=2 to n
If Cells(i,4)>=4 then
Cells(i,1).Resize(1,4).Interior.ColorIndex = 35
End If
Next
End Sub
Результат выполнения показан на рисунке справа

Слайд 17

Примеры программы с циклами на VBA

Циклы Do … Loop используются в прикладных

Примеры программы с циклами на VBA Циклы Do … Loop используются в
задачах очень часто. Рассмотрим такой пример. Пусть по электронной почте были получены данные о некоторых клиентах. Эти данные определенным образом размещены в первом столбце MS Excel.
Требуется переупорядочить эти данные, разместив их, как в базе данных: в столбце А должна находиться фамилия, в столбце В – номер телефона и в столбце С – адрес.
При написании программы на VBA можно часть кода для пересылки значений из одной ячейки в другую создать с помощью функции Record Macro, установив стиль относительных ссылок (Use Relative Reference). При этом надо отформатировать ячейки как текст, увеличив их ширину и сделать активной ячейку А1. Затем войти в редактор кода и к имеющемуся там коду добавить цикл Do Until … Loop. После этого запустить Макрос Macro1.

Слайд 18

Примеры программы с циклами на VBA

Sub Macro1()
Do Until Not Selection.Value > ""

Примеры программы с циклами на VBA Sub Macro1() Do Until Not Selection.Value
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(2, -1).Range("A1").Select
Selection.Cut
ActiveCell.Offset(-2, 2).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, -2).Range("A1:A3").Select
Selection.EntireRow.Delete
ActiveCell.Select
Loop
End Sub