Преимущества и недостатки пользовательских функций в Excel

  • Поделись Этим
Michael Brown

Мы продолжаем серию уроков о пользовательских функциях. В наших предыдущих статьях мы познакомились с пользовательскими функциями и научились их создавать и использовать. В этом руководстве мы рассмотрим особенности использования этих функций и увидим различия между UDF и макросами VBA.

В этом учебнике мы узнаем следующее:

    Мы надеемся, что эта статья расширит ваши знания о UDF и поможет вам еще более эффективно использовать их в своих рабочих книгах Excel.

    Являются ли UDF и макрос одним и тем же?

    И функции, определяемые пользователем, и макросы VBA создаются с помощью редактора VBA. В чем разница между ними и чему отдать предпочтение?

    Самое главное отличие заключается в том, что функция выполняет вычисление, а макрос - какое-то действие. Функция, определяемая пользователем, как и обычная функция Excel, должна быть записана в ячейке. В результате ее выполнения ячейка возвращает какое-то значение. При этом невозможно изменить значения других ячеек, а также некоторые свойства текущей ячейки (в частности,форматирования). Однако в формулах условного форматирования можно использовать пользовательскую функцию.

    UDF и макрос VBA работают по-разному. Например, когда вы создаете UDF в редакторе Visual Basic, вы начинаете с утверждения Функция и заканчивать Конечная функция Когда вы записываете макрос, вы начинаете с утверждения Sub и заканчивать End Sub.

    Не все операторы Visual Basic могут быть использованы для создания UDF. По этой причине макрос является более универсальным решением.

    Макрос не требует от пользователя передачи каких-либо аргументов (и не может принимать аргументы), в отличие от функции, определяемой пользователем.

    Дело в том, что некоторые команды макросов могут использовать адреса ячеек или элементы форматирования (например, цвет). Если вы перемещаете ячейки, добавляете или удаляете строки и столбцы, изменяете формат ячеек, то вы можете легко "сломать" свои макросы. Это особенно возможно, если вы делитесь своим файлом с коллегами, которые не знают, как работают ваши макросы.

    Например, у вас есть файл с прекрасно работающим макросом. Эта формула вычисляет процентное содержание ячеек A1 - A4. Макрос изменяет цвет этих ячеек на желтый. В активной ячейке устанавливается процентный формат.

    Если вы или кто-то другой решит вставить новый ряд, макрос продолжит искать значение в ячейке 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. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.