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




Продолжая выполнение лабораторной работы, создадим функции, которые реализуют вычисления функций на каждой из ветвей, а также функцию, реализующую вычисление F(x), средствами VBA. Рассмотрим последовательность действий, выполняемых при создании пользовательских функций и включения их в библиотеку функций программы Excel.

Для создания новой функции, включаемой в библиотеку функций программы Excel, следует:

1. В меню "Сервис" выбираем команду "Макрос" и далее выполняем команду "Редактор Visual Basic". Открывающееся при этом окно программы Microsoft Visual Basic показано на рис. 7.

 

 
 

 

 


Рис. 7. Окно программы Microsoft Visual Basic

2. В окне программы Microsoft Visual Basic выбираем меню " Insert" (Вставка). В этом меню выбирается и выполняется команда Module (Модуль). В результате выполнения этой команды в проект рабочей книги включается папка "Modules" (Модули), в которой создается первый модуль - "Module1". рабочее которого открывается Под полем проекта (Project - VBAProject) поле редактора, в котором будут создаваться пользовательские функции и процедуры.

3. В меню " Insert" (Вставка) окна Microsoft Visual Basic выбираем команду " Procedure…" (Процедура). Открывается окно "Add Procedure" (Вставить процедуру).

 
 

 

 


Рис. 8

В поле Name (Имя) вводим имя создаваемой функции. Например, F1V. Очень важно, чтобы имя функции не совпадало с именем какой-либо ячейки на листе книги. (Имена ячеек принимают значения от А1 до IV65536). Нарушение этого условия приводит к появлению ошибок при выполнении процедур и функций.

4. В группе Type (Тип) выбираем переключатель, определяющий тип создаваемой процедуры. Тип Sub (Подпрограмма) может быть использован для создания процедур, выполняющих какие-либо действия и не передающих в основную программу числовые значения. Тип процедуры Function (Функция) используется для определения подпрограмм, результатом выполнения которых является одно числовое или логическое значение, передаваемое (возвращаемое) в основную программу через имя функции.

В рассматриваемом примере выбираем переключатель типа Function.

5. В поле Scope (Область действия) выбираем переключатель Public (Общедоступный), обеспечивая тем самым доступность функции пользователя из любых других книг.

6. После нажатия кнопки ОК в поле редактора вносятся две строки заготовки функции:

Public Function F1V()

 

End Function

7. Используя эту заготовку, допишем функцию пользователя для вычислений на первой ветке разветвляющейся функции.

Public Function F1V(x, a, b)

F1V = a + Exp(b * x)

End Function

8. Для проверки работоспособности созданной функции F1V, используя "Мастер функций ", запишем обращение к ней в ячейку С12. Для этого в окне первого шага "Мастера функций" в поле "Категория:" выбираем категорию "Определенные пользователем". Выбор функции F1V и нажатие кнопки ОК открывает ДО для определения параметров обращения. На рис. 9 показан результат определения ссылок в полях окна второго шага "Мастера функций"

 
 

 

 


Рис. 9

Следует обратить внимание на то, что ссылки на параметры А и В должны быть абсолютными. Этим обеспечивается возможность "протягивания" формулы для вычисления значений функции F1V в ячейках от С12 до С32.

9. Повторяя действия пунктов от 2 до 8, создаем функции F2V и F3V, реализующие соответственно функции для вычисления второй, третьей ветвей функции средствами алгоритмического языка Visual Basic. Ниже приведены тексты этих функций.


Public Function F2V(x, a, b)

F2V=(a+b*x)/(1+x)

End Function

Public Function F3V(x, a, b)

F3V = a / (b * x)

End Function

В записи выражений, реализующих функции F2V и F3V, следует обратить внимание на последовательность выполнения операций. Эта последовательность определяется приоритетами выполняемых операций и расстановкой круглых скобок.

Рассмотрим порядок выполнения операций по записи оператора для вычисления функции F2V

Первой выполняется операция умножения b на х. Второй выполняется операция сложения , в результате выполнения которой вычисляется значение числителя. Третьей операцией выполняется вычисление знаменателя (1 + х) и лишь после этого выполняется операция деления значения на (1 + х).

Неправильная расстановка скобок в записи выражений является наиболее часто встречающейся ошибкой.

10. Реализовав в модуле функции F1V, F2V, F3V и заполнив соответствующие столбцы таблицы, переходим к записи процедуры для вычисления значения разветвляющейся функции. Назовем эту функцию QRF. Блок-схема её алгоритма приведена на рис. 1.

Реализация этой функции на языке программирования Visual Basic (VB) отличается от формата формулы, использованной нами в реализации функции средствами программы Excel.

Public Function QRF(x, a, b, alfa, betta)

'x - аргумент функции, a,b,alfa,betta - параметры

If (x < alfa) Then QRF = a + Exp(b * x) _

Else _

If (x <= betta) Then QRF = (a + b * x) / (1 + x) _

Else QRF = a / (b * x)

End Function

Для реализации логического условия "ЕСЛИ" в языке VB используется логический оператор

If <условие> Then <значение_функции_на_1-й_ветви>

Else <значение_функции_на_2-й_ветви>

(Перевод слов: If - если, Then - тогда, Else - иначе).

Для записи операторов, в языке многострочных

Возможен другой вариант реализации разветвляющейся функции, в котором используются обращения к уже созданным ранее функциям F1V, F2V и F3V. Ниже приводится текст функции QRF1 с обращениями к этим функциям.

Public Function QRF1(x, a, b, alfa, betta)

'x - аргумент функции, a,b,alfa,betta - параметры

If (x < alfa) Then QRF1 = F1V(x, a, b) _

Else _

If (x <= betta) Then QRF1 = F2V(x, a, b) _

Else QRF1 = F3V(x, a, b)

End Function

На рис. 10 приведён фрагмент таблицы, в которую включены столбцы F(X) - вычисление разветвляющейся функции средствами программы Excel, QRF(X) и QRF1(X) - вычисление разветвляющейся функции с использованием двух вариантов реализации разветвляющейся функции средствами языка программирования VB.

 

 

Рис. 10

11. Сравнивая столбцы F(X), QRF(X) и QRF1(X) таблицы, мы видим их полную идентичность. В окончательном документе можно удалить два из этих трёх столбцов.

12. Перед построением графиков функций F1V, F2V, F3V и QRF1(X) обратим внимание на то, что в таблице значений функции F2V значение функции для аргумента Х = -1 равно 4,053Е+15. Это большое число получается из-за того, что знаменатель функции в этой точке становится равным 0. Аналогичная особая точка имеется и в функции F3V при значении аргумента равном нулю. В таблице, приведенной на рис. 10, мы видим что при значении аргумента равном -2,8Е-16 в функции F3V имеет место выброс. Вид графиков, построенных по данным, приведенным в таблице рис. 10, показан на диаграмме рис. 11.

 

 


Рис. 11.

13. Исключить влияние особых точек можно, построив отдельно график разветвляющейся функции. Если же мы всё-таки хотим получить диаграмму, позволяющую выполнить наглядное сравнение функций, то можно "сгладить" выбросы в особых точках, заменив в этих точках значения функций F2V и F3V на максимальное или минимальное значение, достигаемые одной из табулируемых функций на интервале изменения аргумента.

14. Для определения максимального или минимального значений, достигаемых хотя бы одной из табулируемых функций, выполним следующие действия:

а) заменим значения функций в особых точках каким-либо числом, принадлежащим интервалу значений, определяемому таблицей. (В нашем примере можно ввести в соответствующие ячейки таблицы нули.)

б) Выделим все значения функций, входящие в таблицу. (В нашем случае это ячейки от В12 до Е32.)

в) Переведём УМ к полю автоматического вычисления итогов в строке состояния.

г) Для выбора функции автоматического подведения итогов выполним ЩПК и откроем контекстное меню с набором итоговых функций.

д) Выберем строку с названием функции "Минимум" è ЩЛК. Запишем минимальное числовое значение, отображаемое в поле итоговых формул строки состояния.

е) Повторим действия пункта "г)" и выберем функцию " Максимум ".

15. Запишем полученные нами минимальное и максимальное значения в соответствующие ячейки обнуленные нами ранее. Таким образом, мы получим таблицу, из которой будут убраны "особые" точки.

16. По этой таблице построим графики функций и выполним необходимые операции начального форматирования диаграммы.

17. Выполняем форматирование заголовка документа, таблицы и окончательное форматирование диаграммы.



Поделиться:




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

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


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