Процедура типа Function, или пользовательская функция – это особый вид процедуры, которая всегда возвращает какое-то вычисленное значение. То есть, это фрагмент кода, который содержит определённые выражения, выполняет вычисление на основании этих выражений и возвращает результат этих вычислений.
Если обратится к функции, то можно получить результат вычисления без повторного написания выражений, и вывести этот результат в том месте, где указывается имя функции.
Главное отличие между функцией и процедурой в том, что функция возвращает значение, а процедура – нет.
Синтаксис функций в VBA
Function Name(Argument_List) As Type
Операторы VBA
Name = expression
End Function
Здесь,
- Function – ключевое слово, которое объявляет начало функции.
- Name – имя функции.
- Argument_List – список аргументов функции.
- Type – тип возвращаемого значения функции.
- Name = expression – присваиваемое функции значение, которое она должна вернуть.
- End Function – ключевые слова, которые заканчивают функцию.
Значение, которое возвращает функция, может иметь любой тип данных из тех, что существуют в языке VBA.
Если при объявлении функции, тип данных не указан, то он принимается как тип Variant.
Я настоятельно рекомендую указывать тип данных при объявлении функций, поскольку Variant занимает больше памяти, чем любой другой тип данных. Соответственно, на обработку значений с типом данных Variant вашей программе потребуется больше времени.
Простой пример использования функций
Function SLen(tStr As String) As Integer
SLen = Len(Trim(tStr))
End Function
Sub myCode()
MsgBox SLen(" Слово ") 'будут видалені початковий та кінцевий пробіл і виведено в діалоговому вікні кількість символів – 5
End Sub
Данная функция удаляет пробелы в начале и в конце строки, а также подсчитывает количество символов в выражении.
Ещё один пример пользовательской функции
Function SquareRoot()
SquareRoot = (Sqr(InputBox("Введіть значення:")))
End Function
Sub myCode()
MsgBox (SquareRoot())
End Sub
В данном примере, пользователю будет предложено ввести число для того, чтобы программа могла вычислить его квадратный корень. После ввода числа и нажатия на кнопку OK буде показано следующее диалоговое окно с результатом вычисления.
Помните.
Главное назначение функции – возвращение значения.
Процедуру типа Function можно выполнить только вызвав её из другой процедуры.
Если в процедуре типа Function отсутствует оператор присваивания, то VBA вернёт следующие значения:
- 0 – для функций, которые возвращают любой числовой тип;
- null – для функций, который возвращают строковый тип;
- Empty – для функций, который возвращают результат с типом Variant;
- Nothing – для функций, который возвращают результат с типом Object;
Важно!
Функция не должна изменять данные, которые передаются ей в качестве аргументов.
Поиск функций в VBA
Если вы работаете с большим проектом и используете много разных процедур и функций, то вполне логично, что вам будет тяжело запомнить в каком из модулей хранится та функция, которая нужна именно сейчас.
Чтобы быстро найти нужную процедуру, или функцию, и посмотреть её VBA код, следует воспользоваться окном Object Browser (View → Object Browser).

Чтобы не забыть что выполняет та, или иная функция, рекомендуется делать её описание. Так вы всегда сможете вспомнить назначение созданной ранее функции и её особенности. А если с вашим проектом будет работать другой программист, то это однозначно поможет ему разобраться в вашем коде.
Чтобы добавить описание к процедуре (или функции), нужно:
- Найти её в окне Object Browser.
- Кликнуть по найденной процедуре-функции правой кнопкой мыши.
- В появившемся контекстном меню нажать Properties.
- В появившемся окне Member Options, в поле Description ввести описание.
- Нажать OK.

