Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum11_po_Excel_pr_15_2C_VBA_funktsii_pol....docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.35 Mб
Скачать

9

Практическая работа №15.

Тема: VBA. Функции пользователя.

Немного теории.

Также как и макросы, функции пользователя являются эффективным инструментом при работе с данными в электронных таблицах. Главное отличие функций пользователя от макросов в том, что функцией в качестве результата возвращается значение (например, текстовое или числовое). С точки зрения создания функций пользователя (по сравнению с макросом) особой разницы нет. Однако функцию нельзя записать как макрос в окне приложения Excel.

Пример 1.

Создание функции в редакторе VBA.

Для того, чтобы добавить в проект новую функции. Пользователя, следует предварительно выбрать объект (модуль, лист, книга) в который эта функция будет добавляться. Удобно записывать функции в отдельный модуль. В любом случае, для автоматической вставки инструкций начала и окончания функции в окне редактора VBA выбирают команду Insert Procedure (см. рис. 1):

Рис. 1. Вставка процедуры или функции в модуль проекта.

Рис. 2. Вид диалогового окна настроек параметров процедур и функций.

После чего откроется диалоговое окно Add Procedure (рис. 2), где в поле Name введите SumProd (для нашего случая), переключатель Type установите в положение Function (создание функций), остальные элементы оставьте как есть (переключатель Scope – в положении Public для доступности функции, возле опции All Local variables as Statics флажок не ставить, для того чтобы можно было переходить в режим локальных статических переменных).

В результате в модуль добавляется конструкция, состоящая из инструкций начала и окончания функции пользователя. В них присутствует ключевое слово Function (вместо Sub для процедур) и указано название функции, см. рис. 3.

Между инструкциями начала и окончания функции вводится программный код, определяющий алгоритм её вычисления. Как правило, в скобках после названия функции указываются также и ее аргументы.

В качестве примера создадим очень простую функцию, которая имеет два значения аргумента, а в качестве значения функции будет возвращаться сумма этих аргументов, если первый аргумент меньше второго, и произведение аргументов, если указанное условие не выполняется. Наиболее простой вариант программного кода функции (с указанием типа аргументов) в окне редактора VBA см. в листинге 1:

Рис. 3. Вид диалогового окна модуля проекта с инструкциями начала и окончания программного кода функции.

Листинг 1. Программный код функции SumProd ( )

Public Function SumProd (x As Integer, y As Integer)

Dim s As Integer

If x < y Then s = x + y Else s = x * y

SumProd = s

End Function

Здесь основу функции составляет однострочный условный оператор If, который проверяет условие x < y (переменные x и y указаны в качестве аргументов функции). Если условие выполнено, то локальной переменной s присваивается значение, равное сумме аргументов функции (инструкция s = x + y после ключевого слова Then). В противном случае эта переменная равна произведению аргументов (инструкция s = x * y после ключевого слова Else). Инструкцией SumProd = s значение локальной переменной возвращается как значение функции.

Проверим работу функции.

Для этого:

1) Запустите программу MS Excel и выполните команду: Разработчик → Код → Visual Basic. Если вы хотите, чтобы окно ProjectVBA Project и окно Properties располагались отдельно друг от друга, в окне MS Visual Basic выполните команду: WindowCascade.

2) Вставьте в проект модуль с помощью команды: InsertModule. Далее выполните команду: Insert Procedure.

В диалоговом окне Add Procedure установите опции как на рис. 2. В результате в модуль добавилась конструкция, состоящая из начала и окончания функции пользователя (см. рис. 3).

3) Введите программный код функции SumProd (x,y) как указано в листинге 1. Вид окна модуля проекта после выполнения указанных действий см. рис. 4. Откомпилируйте код функции, выполнив команду: DebugCompile VBAProject.

4) Проверим работу функции. Перейдите в окно рабочего документа Excel (нажмите пиктограмму в левом верхнем углу окна MS Visual Basic). В ячейки B4:B5 введите целочисленные значения для аргументов функции, а в ячейку E6 введите формулу: = SumProd (B4;B5). Причем при вводе функции появляется как обычно подсказка, и в списке доступных функций есть также и созданная нами функция пользователя, см. рис. 5.

5) В ячейку Е4 введите формулу: = В4 + В5 для вычисления суммы аргументов, а в ячейку Е5 введите формулу: = В4*В5 для вычисления произведения аргументов. В ячейку В6 введите формулу: = ЕСЛИ(В4<B5;”Да”;”Нет”), которая проверяет условие того, что первый аргумент (ячейка В4) меньше второго аргумента (ячейка В5). Если условие выполнено, возвращается значение Да, в противном случае - значение Нет. Вид окна документа с представленными результатами вычислений, см. рис. 6.

При значении аргументов 1 и 2 вычисляется их сумма. Если первый аргумент существенно увеличить (в ячейку В4 введите, например, число 5), получается произведение двух чисел, см. рис. 7.

Рис. 4. Окно редактора VBA c программным кодом функции SumProd.

Рис. 5. При вводе функции в контекстной справке приведена и функция пользователя.

Рис. 6. Результат вычислений с использованием созданной функции SumProd.

Рис. 7. Результат вычислений с использованием созданной функции SumProd после изменении аргументов функции (значение аргументов также изменилось).

Понятно, что определить такого рода функцию можно и без применения возможностей VBA. Тем не менее, иногда бывает удобно определить специальную функцию пользователя, нежели каждый раз вводить громоздкие формулы.

Пример 2.

Вычисление факториала.

По определению, факториал – это произведение чисел от 1 до заданного числа включительно: n! = 1·2·3…·n, где n > 0, . По определению: 0! = 1. Например, при n = 4, n! = 1·2·3·4 = 24.

В виде реккурентной формулы n факториал запишется в виде: . Вычислять факториал можно разными способами. Рассмотрим два из них: 1) с использованием оператора цикла; 2) рекурсивный вызов функции.

Примечание 1: следует отметить, что в Excel есть встроенная функция ФАКТР( ) для вычисления факториалов. Вычисляемые на основе функций пользователя значения будем сравнивать с теми, что вычислены на основе использования функции ФАКТР( ).

В функции пользователя Fact1( ) факториал числа-аргумента функции вычисляется последовательным перемножением натуральных чисел в операторе цикла. Программный код функции Fact1( ) приведен в листинге 2: