Предимства и недостатъци на потребителските функции в Excel

  • Споделя Това
Michael Brown

Продължаваме поредицата от уроци за потребителски дефинирани функции. В предишните ни статии се запознахме с потребителските функции и научихме как да ги създаваме и използваме. В това ръководство ще разгледаме особеностите при използването на тези функции и ще видим разликите между UDF и макросите на VBA.

В този урок ще научим следното:

    Надяваме се, че тази статия ще подобри познанията ви за UDF и ще ви помогне да ги използвате още по-ефективно в работните си книги на Excel.

    Едно и също нещо ли е UDF и Macro?

    С помощта на редактора VBA се създават както потребителски дефинирани функции, така и макроси VBA. Каква е разликата между тях и на какво да се отдаде предпочитание?

    Най-важната разлика е, че функцията извършва изчисление, а макросът извършва някакво действие. Дефинираната от потребителя функция, както и обикновената функция на Excel, трябва да бъде записана в клетка. В резултат на изпълнението ѝ клетката връща някаква стойност. В същото време е невъзможно да се променят стойностите на други клетки, както и някои свойства на текущата клетка (по-специално,Можете обаче да използвате потребителска функция във формулите за условно форматиране.

    UDF и VBA макросите работят по различен начин. Например, когато създавате UDF в редактора на Visual Basic, започвате с изявление Функция и да завършва с Край на функцията . Когато записвате макрос, започвате с изявление Под и да завършва с Край на Sub.

    Не всички оператори на Visual Basic могат да се използват за създаване на UDF-и. Поради тази причина макросът е по-универсално решение.

    Макросът не изисква от потребителя да подава никакви аргументи (нито може да приема аргументи), за разлика от дефинираната от потребителя функция.

    Въпросът е, че някои команди на макросите могат да използват адреси на клетки или елементи за форматиране (например цвят). Ако премествате клетки, добавяте или премахвате редове и колони, променяте формата на клетките, тогава лесно можете да "счупите" макросите си. Това е особено възможно, ако споделяте файла си с колеги, които не знаят как работят макросите ви.

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

    Ако вие или някой друг реши да вмъкне нов ред, макросът ще продължи да търси стойността в клетката A4 (параметър 4,1 във вашия UDF), ще се провали и ще върне грешка:

    В този случай грешката е възникнала поради деление на нула (няма стойност в новодобавения ред). В случай че макросът извършва, да речем, сумиране, тогава просто ще получите грешен резултат. Но няма да разберете за това.

    За разлика от макросите, дефинираните от потребителя функции не могат да предизвикат такава неприятна ситуация.

    По-долу виждате изпълнението на същите изчисления с помощта на UDF. Тук можете да зададете входни клетки навсякъде в работния лист и няма да се сблъскате с неочаквани проблеми при промяната им.

    Написах следната формула в C3:

    =UDF_vs_Macro(A1,A4)

    След това вмъкнах празен ред и формулата се промени, както можете да видите на снимката по-горе.

    Сега можем да преместим входна клетка или клетка с функция навсякъде. Резултатът винаги ще бъде правилен.

    Допълнително предимство на използването на UDF е, че те се актуализират автоматично при промяна на стойността във входната клетка. Когато използвате макроси, винаги трябва да сте сигурни, че всички данни са актуални.

    Имайки предвид този пример, бих предпочел да използвам UDF, когато е възможно, и да използвам макроси само за други дейности, които не са свързани с изчисления.

    Ограничения и недостатъци на използването на UDF

    Вече споменах предимствата на UDF по-горе. Накратко, той може да извършва изчисления, които не са възможни със стандартните функции на Excel. Освен това може да запазва и използва дълги и сложни формули, като ги превръща в една функция. И няма да се налага да пишете сложни формули отново и отново.

    Нека сега да поговорим по-подробно за недостатъците на ОДС:

    • Създаването на UDF изисква използването на VBA. Няма как да се заобиколи. Това означава, че потребителят не може да запише UDF по същия начин, както макрос на Excel. Трябва сами да създадете UDF. Можете обаче да копирате и поставите части от предварително записания код на макроса във вашата функция. Просто трябва да сте наясно с ограниченията на потребителските функции.
    • Друг недостатък на UDF е, че подобно на всяка друга функция на Excel тя може да върне само една стойност или масив от стойности в клетка. Тя просто извършва изчисления, нищо повече.
    • Ако искате да споделите работната си книга с колегите си, не забравяйте да запазите UDF в същия файл. В противен случай вашите потребителски функции няма да работят за тях.
    • Потребителските функции, създадени с редактора на VBA, са по-бавни от обикновените функции. Това е особено забележимо при големи таблици. За съжаление, засега VBA е много бавен език за програмиране. Затова, ако имате много данни, опитайте се да използвате стандартни функции, когато е възможно, или да създавате UDF с помощта на функцията LAMBDA.

    Ограничения на потребителската функция:

    • UDF са предназначени за извършване на изчисления и връщане на стойност. Те не могат да се използват вместо макроси.
    • Те не могат да променят съдържанието на други клетки (само на активната клетка).
    • Имената на функциите трябва да спазват определени правила. Например не можете да използвате име, което съвпада с име на родна функция на Excel или с адрес на клетка, например AB123.
    • Вашата потребителска функция не може да съдържа интервали в името, но може да включва символа за подчертаване. Предпочитаният метод обаче е да се използват главни букви в началото на всяка нова дума (например GetMaxBetween).
    • UDF не може да копира и поставя клетки в други области на работния лист.
    • Те не могат да променят активния работен лист.
    • UDF не могат да променят форматирането на активната клетка. Ако искате да промените форматирането на дадена клетка при показване на различни стойности, трябва да използвате условно форматиране.
    • Те не могат да отварят допълнителни книги.
    • Те не могат да се използват за стартиране на макроси чрез Application.OnTime.
    • Дефинирана от потребителя функция не може да бъде създадена с помощта на макрорекордера.
    • Функциите не се появяват в Разработчик> Макроси диалог.
    • Вашите функции ще се появят в диалоговия прозорец ( Вмъкване> Функция ) и в списъка с функции само ако са декларирани като Публичен (това е настройката по подразбиране, освен ако не е посочено друго).
    • Всички функции, декларирани като Частна няма да се появи в списъка с функции.

    Доста бавната работа, както и някои ограничения в използването, могат да ви накарат да се замислите: "Каква е ползата от тези потребителски функции?"

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

    За мен персонализираните функции спестяват много време. А вие? Опитвали ли сте вече да създадете свой собствен UDF? Хареса ли ви повече от основните функции на Excel? Нека го обсъдим в коментарите :)

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.