Зміст
Ми продовжуємо цикл статей про користувацькі функції. У попередніх статтях ми познайомилися з користувацькими функціями і навчилися їх створювати і використовувати. У цій статті ми розглянемо специфіку використання цих функцій і побачимо відмінності між UDF і макросами VBA.
У цьому уроці ми дізнаємося про наступне:
Ми сподіваємося, що ця стаття розширить ваші знання про UDF і допоможе вам ще ефективніше використовувати їх у ваших робочих книгах Excel.
ОДС і Макрос - це одне і те ж?
За допомогою редактора VBA створюються як користувацькі функції, так і макроси VBA. У чому різниця між ними і чому віддати перевагу?
Найголовніша відмінність полягає в тому, що функція виконує розрахунок, а макрос - деяку дію. Визначена користувачем функція, як і звичайна функція Excel, повинна бути записана в комірці. В результаті її виконання комірка повертає деяке значення. При цьому неможливо змінити значення інших комірок, а також деякі властивості поточної комірки (зокрема,Однак у формулах умовного форматування можна використовувати користувацьку функцію.
UDF і макрос VBA працюють по-різному. Наприклад, при створенні UDF в редакторі Visual Basic, ви починаєте з інструкції Функція і закінчуються на Кінцева функція Коли ви записуєте макрос, ви починаєте з оператора Sub і закінчуються на Кінець передачі.
Не всі оператори Visual Basic можуть бути використані для створення UDF. З цієї причини макрос є більш універсальним рішенням.
Макрос не вимагає від користувача передачі жодних аргументів (і не може приймати жодних аргументів), на відміну від функції, визначеної користувачем.
Справа в тому, що деякі команди макросів можуть використовувати адреси комірок або елементи форматування (наприклад, колір). Якщо ви будете переміщати комірки, додавати або видаляти рядки і стовпці, змінювати формат комірок, то ви можете легко "зламати" свої макроси. Особливо це можливо, якщо ви поділитеся своїм файлом з колегами, які не знають, як працюють ваші макроси.
Наприклад, у вас є файл з ідеально працюючим макросом, який розраховує відсоткове співвідношення комірок від А1 до А4. Макрос змінює колір цих комірок на жовтий. В активній комірці встановлюється формат у відсотках.
Якщо ви або хтось інший вирішить вставити новий рядок, макрос продовжить шукати значення в комірці А4 (параметр 4,1 у вашому UDF), зазнає невдачі і поверне помилку:
В даному випадку помилка сталася через ділення на нуль (відсутнє значення в новому доданому рядку). Якщо ж макрос виконує, скажімо, підсумовування, то ви просто отримаєте невірний результат. Але не будете про це знати.
На відміну від макросів, користувацькі функції не можуть спричинити таку неприємну ситуацію.
Нижче наведено виконання тих же розрахунків з використанням UDF. Тут ви можете вказати комірки введення в будь-якому місці робочого аркуша і не зіткнетеся з несподіваними проблемами при його зміні.
Я написав наступну формулу в С3:
=UDF_проти_Макро(A1,A4)
Потім я вставив порожній рядок, і формула змінилася, як ви можете бачити на скріншоті вище.
Тепер ми можемо переміщати комірку введення або комірку з функцією куди завгодно. Результат завжди буде правильним.
Додатковою перевагою використання 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? Давайте обговоримо це в коментарях :)