Создание функций пользователя с несколькими операторами условного перехода.
Рассмотрим пример функции пользователя, вычисляющей значение следующей функции с тремя условиями:
Функцию z можно вычислить с помощью следующей функции пользователя:
Function z (t)
If t <= -1 Then z = (1 + Abs(t))/(1 +t +t^2)^(1/3)
If t > -1 And t < 0 Then z = 2*Application.Ln (1+t^2) + _
(1 + Cos (t) ^ 4) / (2 + t)
If t >= 0 Then z = (1+t)^(3/5)
End Function
Функция Ln не является внутренней функцией VBA, поэтому для ее вызова нужно пользоваться конструкцией Application.Ln.
Существует также другой способ вычисления функции z:
Function z (t)
If t <= -1 Then
z= (1+ Abs( t ))/(1+ t + t^2)^(1/3)
ElseIf t< 0 Then z= 2 *Application.Ln(1+ t^2) + _
(1+ Cos(t)^4)/(2 + t)
Else
z= (1 + t)^(3/5)
End If
End Function
Пусть требуется найти значения функции z(t) в интервале [-1.8; 1.8] с шагом 0,1, используя функцию пользователя и формулу Excel а также построить графики функции, используя ее значения, полученные с помощью функции пользователя и формул Excel. Для этого следует выполнить действия аналогичные тем, которые выполнялись при нахождении значений и построении графиков функций g1(y) и g2(y). Чтобы найти значения функции z(t) с помощью формул Excel, необходимо в ячейку С2 ввести формулу
= ЕСЛИ (А2 <= -1; (1 + ABS(A2)) / (1 + A2 + A2^2)^(1/3); ЕСЛИ (A2<0; 2*LN(1+A1^2) + (1 + COS (A2)^4)/(2 + A2);(1+A2)^(3/5)))
и скопировать ее в соответствующий диапазон (рис. 10.6).
Рис. 10.6. Значения и графики функций z1(t) и z2(t).
Как видно из рисунка 6.6 значения функций z1(t) и z2(t) и графики их функций совпадают.
Макрос это программа, записанная на языке VBA и служащая для автоматизации выполнения действий, которые часто повторяются при работе с табличным процессором MS Excel. Макросы можно писать вручную или создавать автоматически с помощью транслятора Macro Recorder. Транслятор Macro Recorder записывает все действия пользователя в виде программы на языке VBA и сохраняет ее в виде макроса. В любой момент макрос может быть запущен на исполнение и система повторит в автоматическом режиме те действия, которые записаны в макросе. Для записи макроса вручную необходимо:
· выполнить команду Сервис~Макрос~Редактор Visual Basic~ или нажать кнопку Редактор Visual Basic панели инструментов Visual Basic;
· выполнить команду Вставка~Модуль~;
· ввести текст макроса в окно редактора кода открытого модуля (рис. 5.1).
Рис.5.1. Окно редактора кода открытого модуля
Для запуска макроса в режиме отладки необходимо выполнить команду Отладка~Войти~ или нажать функциональную клавишу F8. Для выполнения очередной команды макроса каждый раз выполняется команда Отладка~Войти~ или нажимается функциональная клавиша F8. Для выхода из режима отладки необходимо выполнить команду Отладка~Выйти~.
Для записи макроса с помощью транслятора Macro Recorder необходимо:
· выполнить команду Сервис~Макрос~Начать запись~.
· в диалоговое окно Запись макроса(Рис. 5.1) ввести параметры макроса (имя, краткое описание макроса, комбинацию горячих клавиш)
Рис.5.1. Диалоговое окно Запись макроса.
· выполнить действия, которые необходимо записать в макрос;
· остановить запись макроса, нажав на кнопку Остановить запись.
Для просмотра (редактирования) записанного макроса необходимо:
· выполнить команду Сервис~Макрос~Макросы…~;
· в диалоговом окне Макрос (Рис. 5.2) выбрать имя макроса и нажать кнопку Войти (Изменить).
Рис. 5.2. Диалоговое окно Макрос
Появится главное окно редактора VBA (Рис. 5.3), в котором можно увидеть текст макроса, записанного с помощью транслятора Macro Recorder.
Рис.5.3. Главное окно редактора VBA
Пример текста макроса с пояснениями приведен ниже.
Sub Макрос12()
' Макрос12 Макрос
' Макрос записан 16.12.2003 (DEFAULT)
Range("A1:D6").Select – Выделение диапазона A1:D6
Selection.Clear – Удаление содержимого выделенного диапазона
Range("A1:D1").Select - Выделение диапазона A1:D1
With Selection – Начало списка свойств выравнивания в выделенном диапазоне
.HorizontalAlignment = xlCenter – горизонтальное выравнивание "По центру"
.VerticalAlignment = xlJustify - вертикальное выравнивание "По высоте"
.WrapText = True – режим "переносить по словам" включен
.Orientation = -45 – ориентация –45 градусов
.AddIndent = False – отступ отсутствует
.ShrinkToFit = False -– автоматическое изменение шрифта, чтобы текст помещался в ячейку отключено
.MergeCells = False – объединение ячеек отсутствует
End With – Конец списка свойств выравнивания в выделенном диапазоне
With Selection.Font – Начало списка свойств шрифта в выделенном диапазоне
.Name = "Arial Black" – имя шрифта Arial Black
.FontStyle = "полужирный курсив" – начертание "полужирный курсив"
.Size = 14 – размер шрифта 14 пунктов
.Strikethrough = False – зачеркивание отсутствует
.Superscript = False – верхний индекс отсутствует
.Subscript = False– нижний индекс отсутствует
.OutlineFont = False – контур шрифта отсутствует
.Shadow = False – тень шрифта отсутствует
.Underline = xlUnderlineStyleDoubleAccounting – подчеркивание "двойное по значению"
.ColorIndex = 46 – индекс цвета 46 (оранжевый)
End With – Конец списка свойств шрифта в выделенном диапазоне
ActiveCell.Select – Выделение активной ячейки (А1)
ActiveCell.FormulaR1C1 = "A" – Ввод в активную ячейку значения "A"
ActiveCell.Offset(0, 1).Range("A1").Select – Смещение курсора на одну ячейку вправо (в ячейку В1)
ActiveCell.FormulaR1C1 = "B" - Ввод в активную ячейку значения "B"
ActiveCell.Offset(0, 1).Range("A1").Select – Смещение курсора на одну ячейку вправо (в ячейку С1)
ActiveCell.FormulaR1C1 = "X" - Ввод в активную ячейку значения "X"
ActiveCell.Offset(0, 1).Range("A1").Select - смещение курсора на одну ячейку вправо (в ячейку D1)
ActiveCell.FormulaR1C1 = "Y" - Ввод в активную ячейку значения "Y"
Range("A2:D7").Select - Выделение диапазона A2:D7
Selection.NumberFormat = "0.00;[Red]0.00" – Установка в выделенном диапазоне формата "Числовой" с двумя десятичными знаками и отрицательными числами, представленными красным цветом без знака
ActiveCell.Range("A1").Select – Установка курсора в ячейку А2
ActiveCell.FormulaR1C1 = "12.3" – Ввод в ячейку А2 значения "12.3"
ActiveCell.Offset(0, 1).Range("A1").Select – Смещение курсора на одну ячейку вправо (в ячейку В2)
ActiveCell.FormulaR1C1 = "1" - Ввод в ячейку B2 значения "1"
ActiveCell.Offset(0, 1).Range("A1").Select – Смещение курсора на одну ячейку вправо (в ячейку C2)
ActiveCell.FormulaR1C1 = "-2" - Ввод в ячейку C2 значения "-2"
ActiveCell.Offset(1, 0).Range("A1").Select – Смещение курсора на одну ячейку вниз (в ячейку C3)
ActiveCell.FormulaR1C1 = "-1" - Ввод в ячейку C3 значения "-1"
Range("C2:C3").Select – Выделение диапазона C2:C3
Selection.AutoFill Destination:=Range("C2:C6"), Type:=xlFillDefault – Автозаполнение диапазона С2:С6 методом протягивания за маркер заполнения
Range("C2:C6").Select - Выделение диапазона C2:C6
Range("D2").Select - Установка курсора в ячейку D2
ActiveCell.FormulaR1C1 = _
"=(R2C1+R2C2)^RC[-1]/ABS(R2C1*R2C2*RC[-1])+R2C1*(R2C2*RC[-1])^1/3-SIN(R2C1*RC[-1])" – Ввод в активную ячейку (D2) формулы "=($A$2+$B$2)^C2/ABS($A$2*$B$2*C2)+$A$2*($B$2*C2)^1/3-SIN($A$2*C2)"
Range("D2").Select - Установка курсора в ячейку D2
Selection.AutoFill Destination:=Range("D2:D6"), Type:=xlFillDefault– Автозаполнение диапазона D2:D6 методом протягивания за маркер заполнения
Range("D2:D6").Select – Выделение диапазона D2:D6
Range("A1:D2").Select – Выделение диапазона A1:D2
Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous – задание обрамления слева сплошной линией для выделенного диапазона
Selection.Borders(xlEdgeTop).LineStyle = xlContinuous – задание обрамления сверху сплошной линией для выделенного диапазона
Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous – задание обрамления снизу сплошной линией для выделенного диапазона
Selection.Borders(xlEdgeRight).LineStyle = xlContinuous – задание обрамления справа сплошной линией для выделенного диапазона
Selection.Borders(xlInsideVertical).LineStyle = xlContinuous – задание вертикального обрамления сплошной линией внутри выделенного диапазона
Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous – задание горизонтального обрамления сплошной линией внутри выделенного диапазона
Range("A1").Select – Установка табличного курсора в ячейку А1
End Sub
Для запуска макроса на исполнение в автоматическом режиме необходимо:
· сделать активным новый рабочий лист;
· выполнить команду Сервис~Макрос~Макросы…~;
· в диалоговом окне Макрос выделить имя макроса и нажать кнопку Выполнить.
В результате выполненных действий диалоговое окно Макрос закроется и будет выполнена процедура, записанная в макросе.
Литература
- Гарнаев, А.Ю. Excel, VBA, Internet в экономике и финансах / А.Ю. Гарнаев. - М.: БХВ-Петербург, 2011. -411 c.
- Журнал Windows IT Pro/RE, июль 2013. - М.: Открытые Системы, 2013. - 728 c
- Уокенбах, Д. Excel 2010. Профессиональное программирование на VBA (+ CD-ROM) / Д. Уокенбах. - М.: Диалектика / Вильямс, 2014. - 573 c.
- Уокенбах, Джон Excel 2013. Профессиональное программирование на VBA / Джон Уокенбах. - М.: Вильямс, 2014. - 960 c.
- Гарнаев А.Ю. Использование MS Excel и VBA в экономике и финансах. - СПб.: БХВ - Санкт Петербург , 1999. – 336 с., ил.
Дата добавления: 2019-05-21; просмотров: 356;