VBA предоставляет также возможность пользователю создавать собственные функции, работать с которыми на рабочем листе можно при помощи мастера функций точно так же, как и с любой встроенной функцией. Рассмотрим один пример построения функции пользователя. На минуту представьте себе, что вы менеджер издательства по оптовой продаже книг. Для привлечения покупателей в вашем издательстве введена прогрессивная шкала цен. Если продается от 100 до 200 экземпляров книги, то скидка от ее отпускной цены составляет 7%, если продается от 201 до 300 экземпляров, то скидка составляет 10%, а если свыше 300 экземпляров — 15%. Кроме того, для постоянных клиентов предусмотрена дополнительная скидка в размере 5%. Создадим функцию пользователя с именем стоимость для расчета стоимости Партиикниг. Аргументы этой функции назовем ЦенаОднойКниги, Количество и Скидка. Для аргумента Скидка предусмотрим только два допустимых значения: 1 для постоянных клиентов и 0 в противном случае. Построим пользовательскую функцию стоимость следующим образом:
Function Стоимость(ЦенаОднойКниги, Количество, Скидка)
'
' Вычисление стоимости без учета скидки для постоянных клиентов '
If Количество < 100 Then
'
' Продажа до 99 экземпляров
'
СтоимостьБезСкидки = ЦенаОднойКниги * Количество Else
If Количество <= 200 Then
'
' Продажа от 100 до 200 экземпляров
'
СтоимостьБезСкидки = ЦенаОднойКниги * Количество * 0.93
Else '
' Продажа от 201 до 300 экземпляров
'
If Количество <= 300 Then
СтоимостьБезСкидки = ЦенаОднойКниги * Количество * 0.9 Else
' Продажа свыше 300 экземпляров
'
СтоимостьБезСкидки = ЦенаОднойКниги * Количество * 0.85
