Урок за функции на Excel VBA: връщане, повикване, примери
⚡ Умно обобщение
Функцията в Excel VBA е блок от код, който изпълнява задача и връща резултат на устройството, което я е извикало. Тази страница разглежда синтаксиса на декларацията, връщането на стойност, пример за обработено събиране и използването на функция в клетка на работен лист.

Какво е функция?
Функцията е част от код, която изпълнява конкретна задача и връща резултат. Функциите се използват най-вече за извършване на повтарящи се задачи като форматиране на данни за изход, извършване на изчисления и др.
Да предположим, че се развиватеping програма, която изчислява лихва по заем. Можете да създадете функция, която приема сумата на заема и периода на погасяване. След това функцията може да използва сумата на заема и периода на погасяване, за да изчисли лихвата и да върне стойността.
Защо да използвате функции
Предимствата на използването на функции са същите като изброените за подпрограмите: те разделят дълга програма на управляеми части, могат да бъдат използвани повторно от всяка точка на проекта, а описателното име документира какво прави кодът. Урок за подпрограма на Excel VBA покрива тези обезщетения изцяло.
Правила за именуване на функции
Правилата за именуване също са идентични с тези за подпрограми. Името на функция не може да съдържа интервал, трябва да започва с буква или долна черта и не може да бъде резервирано име. VBA ключова дума, като например Функция, Частно или Край.
Синтаксис на VBA за деклариране на функция
Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer) myFunction = arg1 + arg2 End Function
ТУК в синтаксиса,
| Code | действие |
|---|---|
|
|
|
|
|
|
|
|
Как да върнете стойност и да зададете типа данни на функцията
Функцията има една задача, която подпрограмата няма: тя връща стойност. Две подробности контролират тази стойност и двете е лесно да се пропуснат.
Първото е присвояването. VBA няма оператор Return. Вместо това присвоявате резултата на собственото име на функцията, поради което редът гласи myFunction = arg1 + arg2Ако това присвояване никога не се изпълни, функцията тихомълком връща празна стойност, вместо да генерира грешка, така че всеки клон на кода трябва да я задава.
Вторият е типът на връщаната стойност. Декларацията по-горе завършва със затварящата скоба, така че функцията връща тип Variant. Добавянето на клауза As след скобите коригира типа, което е по-бързо, използва по-малко памет и позволява на компилатора да улови несъответствие.
| Декларация | Връщане | Кога да го използвате |
|---|---|---|
| Функция f(x As Long) | вариант | Само когато типът резултат наистина варира |
| Функция f(x) Докато е дълга | Дълга | Цели числа, като например брой и номера на редове |
| Функция f(x) Докато Double | Double | Всяко изчисление, което води до десетични числа |
| Функция f(x) с дължина като низ | Низ | Форматиран текст, върнат за показване |
| Функция f(x) As Long (булева) | Булева | Проверка за валидиране, която дава отговор „вярно“ или „невярно“ |
💡 Съвет: Използвайте функцията Exit, за да излезете преждевременно, след като връщаната стойност е зададена, по същия начин, по който Exit Sub напуска подпрограма.
Функция, демонстрирана с пример:
Функциите са много подобни на подпрограмата. Основната разлика между подпрограма и функция е, че функцията връща стойност, когато бъде извикана. Докато една подпрограма не връща стойност, когато бъде извикана. Да приемем, че искате да съберете две числа. Можете да създадете функция, която приема две числа и връща сумата от числата.
- Създайте потребителския интерфейс
- Добавете функцията
- Напишете код за командния бутон
- Тествайте кода
Стъпка 1) Потребителски интерфейс
Добавете команден бутон към работния лист, както е показано по-долу
Задайте следните свойства на CommandButton1 на следното.
| S / N | контрол | Имот | Стойност |
|---|---|---|---|
| 1 | CommandButton1 | Име | btnAddNumbers |
| 2 | Надпис | Добави Numbers функция |
Сега вашият интерфейс трябва да изглежда както следва
Стъпка 2) Функционален код.
- Натиснете Alt + F11, за да отворите прозореца с код
- Добавете следния код
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
ТУК в кода,
| Code | действие |
|---|---|
|
|
|
|
|
|
Стъпка 3) Напишете Code което извиква функцията
- Щракнете с десния бутон върху btnAddNumbers команден бутон
- Изберете изглед Code
- Добавете следния код
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
ТУК в кода,
| Code | действие |
|---|---|
| „MsgBox добаветеNumbers(един) " |
|
Стъпка 4) Стартирайте програмата и ще получите следните резултати
Изтеглете Excel, съдържащ горния код
Изтеглете горния Excel файл Code
Бутонът по-горе извиква функцията от VBA код. Функция може да бъде извикана и от самия работен лист, без никакъв бутон.
Как да използвате VBA функция в клетка на работен лист
Функция, написана на VBA, може да бъде въведена в клетка точно както SUM или VLOOKUP. Excel нарича това потребителски дефинирана функция или UDF и това е причината много хора да изучават функциите преди подпрограмите. Трябва да бъдат изпълнени три условия.
- Поставете го в стандартен модул: Вмъкване, Модул в редактора. Функция, съхранена зад работен лист или в ThisWorkbook, не е видима за лентата с формули.
- Обявете го публично: В горния пример се използва „Private“, което го скрива от Excel. „Public“ е настройката по подразбиране, така че простото премахване на ключовата дума е достатъчно.
- Връща стойност, без да се променя нищо: UDF не може да форматира клетки, да изтрива редове или да записва в друга клетка. Excel блокира тези действия и клетката показва #VALUE!.
Функцията по-долу преобразува температура и може да се използва навсякъде в листа.
Public Function CelsiusToF(ByVal Celsius As Double) As Double CelsiusToF = (Celsius * 9 / 5) + 32 End Function
Запазете работната книга като .xlsm файл с активирани макроси, след което въведете =ЦелзийДоF(A1) във всяка клетка. Резултатът се актуализира всеки път, когато A1 се промени, а името се появява в списъка за автоматично довършване на формули под категорията „Потребителски дефинирано“. Тъй като работната книга вече съдържа макроси, всеки, който я отваря, трябва да активира съдържанието, преди формулата да върне стойност, а не #NAME?.
Често срещани грешки във функциите на VBA и как да ги поправим
Четири проблема обясняват повечето функции, които се компилират, но връщат грешен отговор.
- Функцията връща Empty или 0: Резултатът никога не е бил присвоен на името на функцията или един клон на If оператор пропуска присвояването. Задайте връщаната стойност на всеки път.
- #NAME? в клетка на работен лист: Функцията е частна, намира се в модул на лист, вместо в стандартен модул, или работната книга е запазена без активирани макроси.
- Препълване с целочислени аргументи: Примерът използва As Integer, което спира на 32 767. Променете и двата параметъра, и типа на връщане на Long за всякакви реални данни.
- Променен аргумент изненадва обаждащия се: Пропускането на ByVal кара VBA да предаде самата променлива, така че функцията може да промени стойността на извикващата функция. Пишете ByVal, освен ако не е желан този ефект.



