Создание функций пользователя с несколькими операторами условного перехода.




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

Функцию 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. Для этого следует выполнить действия аналогичные тем, которые выполнялись при нахождении значений и построении графиков функций g 1(y) и g 2(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. Значения и графики функций z 1(t) и z 2(t).

Как видно из рисунка 6.6 значения функций z 1(t) и z 2(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

Для запуска макроса на исполнение в автоматическом режиме необходимо:

· сделать активным новый рабочий лист;

· выполнить команду Сервис~Макрос~Макросы…~;

· в диалоговом окне Макрос выделить имя макроса и нажать кнопку Выполнить.

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

 

Литература

  1. Гарнаев, А.Ю. Excel, VBA, Internet в экономике и финансах / А.Ю. Гарнаев. - М.: БХВ-Петербург, 2011. -411 c.
  2. Журнал Windows IT Pro/RE, июль 2013. - М.: Открытые Системы, 2013. - 728 c
  3. Уокенбах, Д. Excel 2010. Профессиональное программирование на VBA (+ CD-ROM) / Д. Уокенбах. - М.: Диалектика / Вильямс, 2014. - 573 c.
  4. Уокенбах, Джон Excel 2013. Профессиональное программирование на VBA / Джон Уокенбах. - М.: Вильямс, 2014. - 960 c.
  5. Гарнаев А.Ю. Использование MS Excel и VBA в экономике и финансах. - СПб.: БХВ - Санкт Петербург, 1999. – 336 с., ил.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-03-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: