Функції-процедури vba
Функція-процедура - це особливий вид процедури VBA, що повертає результат. Функції для-процедури, як і вбудовані функції VBA, можуть мати необов'язкові і іменовані аргументи. Для запису функції-процедури не можна використовувати макрорекордер, хоча можна редагувати записаний рекордером макрос і перетворювати його в функцію-процедуру.
Основна відмінність між функцією-процедурою і іншими процедурами, крім того, що функції повертають значення, а процедури - немає, полягає в тому, що у функції-процедурі використовуються ключові слова Function і End Function.
Function Name ([Arglist]) [As Type]
'VBA Statements
[Name = expression]
End Function
Function - ключове слово, що оголошує початок функції.
Name - ім'я функції. Імена функцій слідують тим же правилам, що і імена інших ідентифікаторів VBA.
Arglist - список аргументів цієї функції, необов'язковий елемент.
Type - будь-який тип значення функції. Якщо тип не визначений, результат, який повертає функція-процедура, має тип Variant.
Name = expression - присвоювання функції, яке вказує VBA, яке значення має повертати функція, необов'язковий елемент. Проте, завжди слід включати оператор присвоювання у функції-процедури.
End Function - ключові слова, які закінчують функцію.
Нижче представлений лістинг використання найпростішої функції-процедури, яка прибирає початкові і кінцеві пробіли і підраховує кількість символів у виразі.

Без використання функції лістинг б виглядав так:

З цього простого прикладу, думаю, зрозуміла основна ідея використання функцій-процедур - поліпшення Новомосковскбельності програмного коду і його скорочення (іншими словами, функція-процедура пишеться коли в програмному коді більше 2-3 разів зустрічається один і той же "шматок" коду). Дійсно, якби наша функція-процедура складалася не з одного рядка, а, скажімо, з 10 рядків; і програмний код використовував би цю функцію-процедуру 5 разів, то загальний лістинг програми був би менше на 38 рядків.
Як вже зазначалося раніше, VBA передає всі аргументи в функцію-процедуру як типи Variant. Можна оголошувати певні типи даних для кожного аргументу у списку аргументів.
Аргументи з певними типами використовуються за тими ж знайомим причин, по яким використовуються типізовані змінні або результати функції. Визначення типів аргументів для функції-процедури також допомагає користувачеві при виконанні функції вводити аргументи правильного типу в правильному порядку.