Как создать пользовательскую функцию в Excel, используя VBA

Как создать пользовательскую функцию в Microsoft Excel. Хотя в Excel множество (возможно, сотни) встроенных функций, таких как SUM (СУММ), VLOOKUP (ВПР), LEFT (ЛЕВСИМВ) и других, как только вы начинаете использовать Excel для более сложных…

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

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

Подобно макросам, пользовательские функции могут быть созданы с использованием языка VBA. Для реализации данной задачи необходимо выполнить следующие действия:

  1. Открыть редактор языка VBA с помощью комбинации клавиш ALT+F11.
  2. В открывшемся окне выбрать пункт Insert и подпункт Module, как показано на рисунке:VBA.
  3. Новый модуль будет создан автоматически, при этом в основной части окна редактора появится окно для ввода кода:Новый модуль.
  4. При необходимости можно изменить название модуля.
  5. В отличие от макросов, код которых должен находиться между операторами Sub и End Sub, пользовательские функции обозначают операторами Function и End Function соответственно. В состав пользовательской функции входят название (произвольное имя, отражающее ее суть), список параметров (аргументов) с объявлением их типов, если они требуются (некоторые могут не принимать аргументов), тип возвращаемого значения, тело функции (код, отражающий логику ее работы), а также оператор End Function. Пример простой пользовательской функции, возвращающей названия дня недели в зависимости от указанного номера, представлен на рисунке ниже:Function и End Function.
  6. После ввода представленного выше кода необходимо нажать комбинацию клавиш Ctrl+S или специальный значок в левом верхнем углу редактора кода для сохранения.
  7. Чтобы воспользоваться созданной функцией, необходимо вернуться к табличному редактору Excel, установить курсор в любую ячейку и ввести название пользовательской функции после символа «=»:

UserFunctExample.

Встроенные функции Excel содержат пояснения как возвращаемого результата, так и аргументов, которые они принимают. Это можно увидеть на примере любой функции нажав комбинацию горячих клавиш SHIFT+F3. Но наша функция пока еще не имеет формы.

Чтобы задокументировать пользовательскую функцию, необходимо выполнить следующие действия:

  1. Создайте новый макрос (нажмите комбинацию клавиш Alt+F8), в появившемся окне введите произвольное название нового макроса, нажмите кнопку Создать:Создайте новый макрос.
  2. В результате будет создан новый модуль с заготовкой, ограниченной операторами Sub и End Sub. Sub и End Sub.
  3. Введите код, как показано на рисунке ниже, указав требуемое количество переменных (в зависимости от числа аргументов пользовательской функции):Введите код макроса.
  4. В качестве «Macro» должна быть передана текстовая строка с названием пользовательской функции, в качестве «Description» – переменная типа String с текстом описания возвращаемого значения, в качестве «ArgumentDescriptions» – массив переменных типа String с текстами описаний аргументов пользовательской функции.
  5. Для создания описания пользовательской функции достаточно один раз выполнить созданный выше модуль. Теперь при вызове пользовательской функции (или SHIFT+F3) отображается описание возвращаемого результата и переменной:Description.

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

Окно вставки функции

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

  1. Для его вызова нажмите по кнопке с изображением функции на панели ввода данных в ячейку.Переход к редактору функций для вставки формулы в Excel

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

  3. После выбора наступает время заняться аргументами. Для каждой функции они свои, поскольку выполняются совершенно разные задачи. На следующем скриншоте вы видите аргументы суммы, которыми являются два числа для суммирования.Редактирование аргументов функции для вставки формулы в Excel

  4. После вставки функции в ячейку она отобразится в стандартном виде и все еще будет доступна для редактирования.Ознакомление с результатом в ячейке для вставки формулы в Excel

Пример 1: Два условия

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

Набор чисел для среднего значения при создании функции в функции Excel

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

Набор чисел для суммы при создании функций в функции Excel

Подобная реализация пригодится во многих ситуациях, например, при бухгалтерских расчетах или составлении сметы. В любом случае, это всего лишь пример того, как может выглядеть функция в функции, а пользователь уже сам решает, как эту возможность адаптировать под себя.

  1. Создадим функцию через отдельное окно, нажав по кнопке с тематическим значком.

Кнопка для открытия Мастера функции при работе с программой Excel

Пример базируется на корневой функции «ЕСЛИ», поэтому в окне «Вставка функции» выберите именно ее.

Выбор формулы в Мастере функции при создании корневой функции в Excel

В качестве логического выражения записывайте функцию, считающую среднее значение и определяющую, больше ли оно указанного числа. Тогда строка обретет вид СРЗНАЧ(A1:A6)>300, где A1 и A6 — диапазон захватываемых ячеек, > — знак «больше», а 300 — целевое среднее значение, являющееся истинным.

Ввод логического выражения для функции в функции Excel

Другая функция, используемая внутри корневой, называется «СУММ» — она и будет выводить сумму чисел при истинном значении, поэтому записывается во втором поле в представлении СУММ(C1:D1:E1:F1).

Ввод истинного значения для функции в функции Excel

Если среднее значение не соответствует требованию, выведем любое оповещающее сообщение, например «недостача». Проверьте правильность написания функций и сохраните результат.

Ввод ложного значения для функции в функции Excel

Сейчас функция ЕСЛИ находится в состоянии «истина», а значит, в заданной клетке отобразится сумма указанного диапазона.

Результат первого примера создания функции в функции Excel

Если же условия ложные, всплывет указанное сообщение или 0.

Ложный результат первого примера создания функции в функции Excel

Исходя из увиденного примера, становится понятно, что внутри той же функции ЕСЛИ можно вписать и любую другую функцию, что и выполняет условие рассматриваемой темы. Попробуйте провести эксперименты и заменить рассмотренную функцию на другую, вписав внутри необходимые данные, не забывая и про синтаксис программы.

Еще больше информации об используемом Мастере функций читайте в развернутой инструкции на нашем сайте, где находятся все необходимые сведения, иллюстрирующие работу с инструментом.

Подробнее: Мастер функций в программе Microsoft Excel

Функция Excel – Сцепить

Данная функция соединяет несколько столбцов в один, например, у Вас фамилия имя отчество расположены в отдельном столбце, а Вам хотелось бы соединить их в один. Также Вы можете использовать эту функцию и для других целей, но надеюсь, смысл ее понятен, пример ниже. Для того чтобы вызвать эту функцию необходимо написать в отдельной ячейке =сцепить(столбец1; столбец2 и т.д.), или на панели нажать кнопку «вставить функцию» и набрать сцепить в поиске, и уже потом в графическом интерфейсе выбрать поля.

excel_fun_1.jpg

excel_fun_2.jpg

excel_fun_3.jpg

excel_fun_4.jpg

#1. СУММ

Синтаксис: =СУММ(число1;[число2];…)

число1 — обязательный аргумент.

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

Примеры использования

Допустим, у вас есть массив числовых значений и вам нужно посчитать сумму некоторых из них. Используя функцию СУММ, в области аргументов функции мы подставляем нужные ссылки на ячейки и получаем ответ — 312.

В кое-каких случаях в массивах не находятся значения, которые нужно так же просуммировать, и вместо ссылок можем добавить свои числа. Ответ в этом случае — 419.

image14.png

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

image3.png

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

image8.png

Если в одной или нескольких ячейках диапазона окажется не числовое выражение, а текстовое, Excel будет приравнивать эти значения к нулю.

image17.png

1. МАКС

  • Синтаксис: =МАКС(число1; [число2]; …).

Формула «МАКС» отображает наибольшее из чисел в выбранных ячейках. Аргументами функции могут выступать как отдельные ячейки, так и диапазоны. Обязательно вводить только первый аргумент.

Советы

  • Всякий раз, когда вы пишете блок кода внутри структуры If, For, Do и так далее, убедитесь, что вы он имеет отступ, который можно сделать с помощью пробелов или знаков табуляции (стиль отступов вы выбираете сами). Это сделает ваш код более читабельным, и вам самим потом легче будет отслеживать ошибки и вносить изменения.
  • Используйте имя, которое еще не используется в качестве имени функции в Excel, иначе вы сможете использовать только одну из этих функций.
  • Excel имеет множество встроенных функций, и большинство вычислений можно сделать с помощью независимого их использования или с использованием их комбинаций. Прежде чем писать свою функцию, пройдитесь по всему списку уже существующих функций. При использовании встроенных функций выполнение может происходить быстрее.
  • В некоторых случаях для вычисления результата функции необязательно знать все значения параметров. В подобных случаях вы можете использовать ключевое слово Optional перед именем параметра в заголовке функции. В коде вы можете использовать функцию IsMissing(имя_параметра), чтобы определить, было ли параметру присвоено какое-то значение или нет.
  • Если вы не знаете, как написать код функции, прочитайте статью о том, как написать простейший макрос в Microsoft Excel.

Создание простой пользовательской функции в VBA

Давайте создадим простую пользовательскую функцию на VBA и посмотрим как там все работает.

Ниже представлен код функции, которая из текста оставляет только цифры, отбрасывая буквенные значения.

Function Цифры(Текст As String) As Long Dim i As Long Dim result As String For i = 1 To Len(Текст) If IsNumeric(Mid(Текст, i, 1)) Then result = result & Mid(Текст, i, 1) Next Цифры = CLng(result)End Function

Чтобы у вас все заработало, необходимо вставить данный код в модуль книги. Если вы не знаете как это сделать, то начните со статьи Как записать макрос в Excel.

Теперь посмотрим как функция работает, попробуем использовать ее на листе:

Пример работы пользовательской функции

Прежде чем разбирать саму функцию отметим 2 приятных момента, которые появились после создания:

  • Она стала доступна, как и любая другая встроенная функция (как создать скрытую функцию, расскажем далее).
  • Когда вы ввели знак “=” и начинаете вводить имя функции, то Excel выводит все совпадения и показывает не только встроенные функции, но и пользовательские.

Разбираем функцию пошагово

Теперь давайте глубоко погрузимся и посмотрим, как эта функция создавалась. Начинается функция со строки

Function Цифры(Текст As String) As Long

Слово Function говорит о начале функции, далее идет ее название, в нашем случае Цифры.

  • Имя функции не может содержать пробелов. Кроме того, вы не можете назвать функцию, если она сталкивается с именем ссылки на ячейку. Например, вы не можете назвать функцию ABC123, так как это имя также относится к ячейке в листе Excel.
  • Вы не должны указывать на свою функцию то же имя, что и у существующей функции. Если вы это сделаете, Excel будет отдавать предпочтение встроенной функции.
  • Вы можете использовать символ подчеркивания, если хотите разделить слова. Например, Сумма_Прописью является допустимым именем.

После названия в круглых скобках  описываются аргументы функции. По аналогии со встроенными функциями Excel. В нашем случае используется единственный аргумент Текст. После названия аргумента мы указали As String, это означает, что наш аргумент – текстовое значение или ссылка на ячейку, содержащее текстовое значение. Если вы не укажете тип данных, VBA рассмотрит его как Variant (что означает, что вы можете использовать любой тип данных, VBA его определит самостоятельно).

Последняя часть первой строки As Long задает тип данных, которая возвращает функция. В нашем случае функция будет возвращать целые значения. Это также не обязательно.

Вторая и третья строка функции объявляет дополнительные внутренние переменные, которые мы будем использовать.

Dim i As LongDim result As String

Переменную i мы буем использовать для перебора символов. А переменную result для хранения промежуточного результата функции.

Задача функции – пройти по всем символам переменной Текст и сохранить только те, что являются цифрами. Поэтому начнем цикл с 1 и до последнего символа.

For i = 1 To Len(Текст)

Len – функция, которая определяет количество символов.

Основная строка функции – это проверка является ли очередной символ текста цифрой и если да – то сохранение его в переменной result

If IsNumeric(Mid(Текст, i, 1)) Then result = result & Mid(Текст, i, 1)

Для этого нам потребуется функция IsNumeric – она возвращает True если текст – число и False в противном случае.

Функция Mid берет из аргумента Текст i-ый символ (значение 1, указывает что функция Mid берет только 1 символ)/

Функция Next – закрывает цикл For тут все понятно.

Цифры = CLng(result)

Этой строкой мы преобразовываем текстовую переменную result, которая содержит все цифры аргумента Текст, в числовое значение. И говорим какой результат должна вывести наша функция Цифры.

Последняя строка кода – End Function. Это обязательная строка кода, которая сообщает VBA, что код функции заканчивается здесь.

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

Скачать

Добавление описания функции

В списке функций, выводимом Мастером, невозможно добавить или отредактировать их описание. Список макросов позволяет добавлять процедурам описание, но в нем нет функций. Проблема решается следующим образом:

  • Запустите Мастер функций, посмотрите, как отображается имя нужной функции и закройте его.
  • Откройте список макросов и в поле «Имя макроса» впишите имя пользовательской функции.
  • Нажмите кнопку «Параметры» и в открывшемся окне добавьте или отредактируйте описание.
  • Нажмите кнопку «OK», затем в окне списка макросов — «Отмена». Описание готово!

Добавление описания на примере функции «Деление»:

Добавление описания пользовательской функции в окне «Параметры макроса»

Добавление описания пользовательской функции

Описание функции «Деление» в диалоговом окне Мастера функций «Аргументы функции»:

Описание пользовательской функции в диалоговом окне «Аргументы функции»

Описание пользовательской функции в окне «Аргументы функции»

С помощью окна «Список макросов» можно добавить описание самой функции, а ее аргументам нельзя. Но это можно сделать, используя метод Application.MacroOptions.

#5. ОКРУГЛ

Синтаксис: =ОКРУГЛ(число; число_разрядов)

число — аргумент.

число_разрядов — до какого разряда округляется число.

Функция ОКРУГЛ применяется для округления действительных чисел до требуемого количества знаков после запятой и возвращает округленное значение согласно математическому правилу округления.

К примеру, для округления числа 2,57525 до 2-х символов после запятой можно ввести формулу =ОКРУГЛ(2,57525;2), которая вернет значение 2,58. Эта функция часто используется при построении балансовых и других видов отчетности.

Об этой статье

Эту страницу просматривали 55 598 раз.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...