Урок за функции на Excel VBA: връщане, повикване, примери

⚡ Умно обобщение

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

  • 🎯 Определение: Функцията изпълнява специфична задача и връща един резултат на извикващия код.
  • 🧾 Синтаксис: Име на функция (аргументи) As Type отваря блока, а End Function го затваря.
  • ↩️ Връщане на стойност: Присвоете резултата на името на функцията, както е в addNumbers = първоЧисло + второЧисло.
  • 🔢 Тип връщане: Деклариране на As Long или As Double избягва по-бавния вариант по подразбиране.
  • 🖱️ Повикване: Команден бутон предава две числа и показва върнатата сума в поле за съобщение.
  • 📊 Използване на работен лист: Публична функция в стандартен модул се превръща в потребителски дефинирана формула във всяка клетка.

Функция на Excel VBA

Какво е функция?

Функцията е част от код, която изпълнява конкретна задача и връща резултат. Функциите се използват най-вече за извършване на повтарящи се задачи като форматиране на данни за изход, извършване на изчисления и др.

Да предположим, че се развиватеping програма, която изчислява лихва по заем. Можете да създадете функция, която приема сумата на заема и периода на погасяване. След това функцията може да използва сумата на заема и периода на погасяване, за да изчисли лихвата и да върне стойността.

Защо да използвате функции

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

Правила за именуване на функции

Правилата за именуване също са идентични с тези за подпрограми. Името на функция не може да съдържа интервал, трябва да започва с буква или долна черта и не може да бъде резервирано име. VBA ключова дума, като например Функция, Частно или Край.

Синтаксис на VBA за деклариране на функция

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

ТУК в синтаксиса,

Code действие
  • „Частна функция myFunction(…)“
  • Тук ключовата дума „Function“ се използва за деклариране на функция с име „myFunction“ и стартиране на тялото на функцията.
  • Ключовата дума 'Private' се използва за определяне на обхвата на функцията
  • „ByVal arg1 като цяло число, ByVal arg2 като цяло число“
  • Той декларира два параметъра от целочислен тип данни, наречени „arg1“ и „arg2“.
  • myFunction = arg1 + arg2
  • оценява израза arg1 + arg2 и присвоява резултата на името на функцията.
  • „Крайна функция“
  • „Край на функцията“ се използва за завършване на тялото на функцията

Как да върнете стойност и да зададете типа данни на функцията

Функцията има една задача, която подпрограмата няма: тя връща стойност. Две подробности контролират тази стойност и двете е лесно да се пропуснат.

Първото е присвояването. 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. Създайте потребителския интерфейс
  2. Добавете функцията
  3. Напишете код за командния бутон
  4. Тествайте кода

Стъпка 1) Потребителски интерфейс

Добавете команден бутон към работния лист, както е показано по-долу

VBA функции и подпрограма

Задайте следните свойства на CommandButton1 на следното.

S / N контрол Имот Стойност
1 CommandButton1 Име btnAddNumbers
2 Надпис Добави Numbers функция

Сега вашият интерфейс трябва да изглежда както следва

VBA функции и подпрограма

Стъпка 2) Функционален код.

  1. Натиснете Alt + F11, за да отворите прозореца с код
  2. Добавете следния код
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

ТУК в кода,

Code действие
  • „Добавяне на частна функцияNumbers(...) "
  • Той декларира частна функция „addNumbers”, който приема два целочислени параметъра.
  • „ByVal firstNumber като цяло число, ByVal secondNumber като цяло число“
  • Той декларира две параметърни променливи firstNumber и secondNumber
  • “добаветеNumbers = първо число + второ число”
  • Той добавя стойностите firstNumber и secondNumber и присвоява сумата за добавянеNumbers.

Стъпка 3) Напишете Code което извиква функцията

  1. Щракнете с десния бутон върху btnAddNumbers команден бутон
  2. Изберете изглед Code
  3. Добавете следния код
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

ТУК в кода,

Code действие
„MsgBox добаветеNumbers(един) "
  • Той извиква функцията addNumbers и преминава в 2 и 3 като параметри. Функцията връща сумата от двете числа пет (5)

Стъпка 4) Стартирайте програмата и ще получите следните резултати

VBA функции и подпрограма

Изтеглете 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, освен ако не е желан този ефект.

Въпроси и Отговори

Не директно. Върнете масив или персонализиран тип, който да съдържа няколко стойности в един резултат, или декларирайте допълнителните параметри ByRef, така че функцията да записва обратно в променливите на извикващия.

Добавете ключовата дума Optional със стойност по подразбиране, както е в Optional ByVal Rate As Double = 0.05. Всеки параметър след незадължителен също трябва да е незадължителен и трябва да е последен в списъка.

Да, чрез Application.WorksheetFunction, например Application.WorksheetFunction.Sum(Range(“A1:A10”)). Функциите, които VBA вече предоставя, като например Left или Trim, се извикват директно без този префикс.

Да. Поставете формулата от работния лист и асистент с изкуствен интелект ще върне еквивалентна публична функция с именувани аргументи и деклариран тип връщане. Сравнете двата резултата на примерни редове, преди да замените формулата.

Да. Предоставете функцията и формулата и асистент с изкуствен интелект ще посочи причини, като например несъответствие в типа на аргумента, липсващо присвояване на връщане или опит за промяна на клетка от потребителски дефинирана функция.

Обобщете тази публикация с: