Как в excel создать функцию: Создание пользовательских функций в Excel — Office Add-ins
Содержание
Создание пользовательских функций в Excel — Office Add-ins
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
- Чтение занимает 4 мин
-
Пользовательские функции позволяют разработчикам добавлять новые функции в Excel путем определения этих функций в JavaScript как части надстройки. Пользователи в Excel могут получить доступ к пользовательским функциям так же, как и к любой встроенной функции в Excel, например SUM()
.
Примечание.
Пользовательская функция — это общий термин, который является взаимозаменяемым с определяемой пользователем функцией. Оба условия применяются к надстройкам VBA, COM и Office.js. В документации по надстройкам Office термин «настраиваемая функция » используется при обращении к пользовательским функциям, использующим API JavaScript для Office.
Важно!
Обратите внимание, что настраиваемые функции доступны в Excel на следующих платформах.
- Office для Windows
- Подписка на Microsoft 365
- Розничный бессрочный Office 2016 и более поздних версий
- Office для Mac
- Office в Интернете
В настоящее время пользовательские функции Excel не поддерживаются в следующих приложениях:
- Office для iPad
- корпоративные бессрочные версии Office 2019 или более ранних версий
- Розничная версия Office 2013 с бессрочным сроком 2013
Ниже на анимированном изображении показано, как рабочая книга вызывает функцию, созданную вами с помощью JavaScript или TypeScript. В этом примере пользовательская функция =MYFUNCTION.SPHEREVOLUME
рассчитывает объем сферы.
Приведенный ниже код определяет пользовательскую функцию =MYFUNCTION.SPHEREVOLUME
.
/** * Returns the volume of a sphere. * @customfunction * @param {number} radius */ function sphereVolume(radius) { return Math.pow(radius, 3) * 4 * Math.PI / 3; }
Как определена пользовательская функция в коде
Если использовать генератор Yeoman для надстроек Office для создания в Excel проекта надстройки с пользовательскими функциями, он создаст файлы, управляющие вашими функциями и областью задач. Мы сосредоточимся на файлах, которые важны для пользовательских функций.
Файл | Формат файла | Описание |
---|---|---|
./src/functions/functions.js или ./src/functions/functions.ts | JavaScript или TypeScript | Содержит код, который определяет пользовательские функции. |
./src/functions/functions.html | HTML | Предоставляет <скрипт> со ссылкой на файл JavaScript, который определяет пользовательские функции. |
./manifest.xml | XML | Указывает расположение нескольких файлов, которые используются пользовательскими функциями, например JavaScript, JSON и HTML-файлов. А также среду выполнения, которую должны использовать пользовательские функции, расположение файлов области задач и командных файлов. |
Совет
Генератор Yeoman для надстроек Office предлагает несколько проектов пользовательских функций Excel . Рекомендуется выбрать тип проекта Excel Custom Functions с помощью общей среды выполнения и типа скрипта JavaScript.
Файл скрипта
Файл скрипта (./src/functions/functions.js или ./src/functions/functions.ts) содержит код, определяющий пользовательские функции, и комментарии, определяющие функцию.
Приведенный ниже код определяет пользовательскую функцию add
. Примечания кода используются для создания файла метаданных JSON с описанием пользовательской функции для Excel. Обязательный комментарий @customfunction
объявлен первым, чтобы указать, что это пользовательская функция. Затем объявляются еще два параметра: first
и second
, за которыми следуют их свойства description
. Наконец, дается описание returns
. Дополнительные сведения о том, какие комментарии являются обязательными для вашей пользовательской функции, см. в статье Автоматическое создание метаданных JSON для пользовательских функций.
/** * Adds two numbers. * @customfunction * @param first First number. * @param second Second number. * @returns The sum of the two numbers. */ function add(first, second){ return first + second; }
Файл манифеста
Файл манифеста XML для надстройки, определяющий пользовательские функции (. /manifest.xml в проекте, созданном генератором Yeoman для надстроек Office), выполняет несколько задач.
- Определяет пространство имен для пользовательских функций. Пространство имен добавляется к пользовательским функциям, чтобы клиенты могли определить ваши функции в рамках надстройки.
- Использует <элементы ExtensionPoint> и <Resources> , уникальные для манифеста пользовательских функций. Эти элементы содержат сведения о расположении JavaScript, JSON и HTML-файлов.
- Указывает, какую среду выполнения использовать для пользовательской функции. Рекомендуется всегда использовать общую среду выполнения, если нет особой потребности в использовании другой среды, так как общая позволяет делиться данными между функциями и областью задач.
Полный рабочий манифест из примера надстройки можно просмотреть в одном из репозиториев Github для примеров надстроек Office.
Совет
Если вы будете тестировать надстройку в нескольких средах (например, в среде разработки, в промежуточной среде, в демонстрационной среде и т. п.), рекомендуем использовать отдельный XML-файл манифеста для каждой среды. В каждом файле манифеста можно:
- Указать URL-адреса, соответствующие среде.
- Настроить значения метаданных, такие как
DisplayName
, и метки вResources
для указания среды, чтобы конечные пользователи могли определить соответствующую среду надстройки, загруженной без публикации. - Настроить пользовательские функции
namespace
, чтобы указать среду, если ваша надстройка определяет пользовательские функции.
Соблюдение этих рекомендаций поможет вам упорядочить процесс тестирования и избежать проблем, которые могли бы возникнуть при одновременной загрузке вашей надстройки для нескольких сред.
Совместное редактирование
Excel для Интернета и Windows, подключенный к подписке Microsoft 365, дает конечным пользователям возможность совместно редактировать данные в Excel. Если книга пользователя использует пользовательскую функцию, то коллеге этого пользователя по совместному редактированию будет предложено загрузить надстройку с соответствующими пользовательскими функциями. После загрузки этой надстройки обоими пользователями эта пользовательская функция будет предоставлять результаты обоим пользователям с помощью совместного редактирования.
Дополнительные сведения о совместном редактировании см. в статье О совместном редактировании в Excel.
Дальнейшие действия
Хотите попробовать пользовательские функции? Ознакомьтесь с простым кратким руководством по началу работы с пользовательскими функциями или с более глубоким руководством по пользовательским функциям, если вы этого еще не сделали.
Еще одно простое средство ознакомления с пользовательскими функциями — Script Lab, надстройка, в которой можно экспериментировать с пользовательскими функциями прямо в Excel. Вы можете попробовать создать собственные пользовательские функции или поиграть с готовыми примерами.
См. также
- Сведения о программе для разработчиков Microsoft 365
- Наборы обязательных элементов пользовательских функций
- Правила именования пользовательских функций
- Создание пользовательских функций, совместимых с функциями XLL, определенными пользователями
- Настройка надстройки Office для использования общей среды выполнения
- Среды выполнения в надстройках Office
Как в excel создать функцию
Использование вложенных функций в формуле
Смотрите такжеПримеры работы функцииФункции БСЧЁТ и БСЧЁТА a * c))answer1 = «Единственный 6. 25 * height нечисловые данные» String с текстами установить курсор в показано на рисунке:Ввод формулы и просмотр функции уделить пару секундФормула функции, нажмите в, в диалоговом окнеВ формулу можно вложитьПримечание: ПРОМЕЖУТОЧНЫЕ.ИТОГИ для выполнения для счета с / (2 * корень — «
— 5 *Exit Function описаний аргументов пользовательской любую ячейку иНовый модуль будет создан результатаABS и сообщить, помоглаОписание строке формул кнопкуАргументы функции до 64 уровнейМы стараемся как итоговых расчетов только несколькими условиями в a) & «)»SquareEquation = answer1 age — 161ElseIf holidays Otpusknye функции.
ввести название пользовательской автоматически, при этом
будет содержать строку ли она вам,Результат
Вставить функциюотображаются аргументы для
-
функций. можно оперативнее обеспечивать
-
для видимых ячеек Excel. Else: & «(» & ElseIf sex =
= «Отрицательное числоДля создания описания пользовательской функции после символа
-
в основной частиНажмите клавишу ВВОД. «Возвращает модуль (абсолютную с помощью кнопок’=ЕСЛИ(A2>89,»A»,ЕСЛИ(A2>79,»B», ЕСЛИ(A2>69,»C»,ЕСЛИ(A2>59,»D»,»F»))))
. функцииWindows В сети
вас актуальными справочными автофильтра. Умные формулыПримеры работы функцийSquareEquation = «Решений -c / b «мужской» Then или 0″ функции достаточно один «=»: окна редактора появитсяЗакрывающая круглая скобка будет
-
величину) числа». внизу страницы. ДляИспользует вложенные функции ЕСЛИВ диалоговом окне Вставить
ЕСЛИ материалами на вашем для вычисления промежуточных БСЧЁТ и БСЧЁТА
нет» & «)»CaloriesPerDay = 10Exit Function раз выполнить созданныйВстроенные функции Excel содержат окно для ввода добавлена автоматически, аВыбор функции и ввод удобства также приводим для назначения буквенной функцию в поле. Чтобы вложить другуюЩелкните ячейку, в которую языке. Эта страница итогов в динамических для подсчета количестваEnd If
-
ElseIf c = * weight +
Else выше модуль. Теперь пояснения как возвращаемого кода: в ячейке отобразится ее аргументов ссылку на оригинал категории оценке ввыберите категорию функцию, можно ввести нужно ввести формулу. переведена автоматически, поэтому таблицах.
значений в базеEnd Function 0 Then 6.25 * heightOtpusknye = summZp при вызове пользовательской результата, так и
-
При необходимости можно изменить результат функции, используемой (на английском языке).
-
ячейке A2.выберите
-
ее в полеЧтобы начать формулу с ее текст можетФункция НАКЛОН для определения данных по множественным
-
Найдем корни первого уравнения:answer1 = «Единственный — 5 * * 24 / функции (или SHIFT+F3) аргументов, которые они
название модуля. в формуле. ВыделитеВ списке дважды щелкните
-
Кроме ввода формул для=ЕСЛИ(A2>89;»A»;ЕСЛИ(A2>79;»B»; ЕСЛИ(A2>69;»C»;ЕСЛИ(A2>59;»D»;»F»))))все аргумента. Например, можно функции, нажмите в содержать неточности и
-
наклона линейной регрессии условиям. Как искать
-
=SquareEquation(A3;B3;C3) корень — «
Примеры
age + 5 (365 — holidays) отображается описание возвращаемого принимают. Это можноВ отличие от макросов,
ячейку и посмотрите функцию, которую требуется выполнения базовых математических’=ЕСЛИ(A3>89,»A»,ЕСЛИ(A3>79,»B», ЕСЛИ(A3>69,»C»,ЕСЛИ(A3>59,»D»,»F»)))). ввести строке формул кнопку грамматические ошибки. Для в Excel. текст с неточнымВыполним расчеты для остальныхSquareEquation = answer1Else: CaloriesPerDay =
End If
| ||
результата и переменной:
| ||
увидеть на примере
| ||
код которых должен
| ||
на формулу в
|
использовать. Excel вводит
|
операций, таких как
|
Использует вложенные функции ЕСЛИ
|
Если вы знакомы сСУММ(G2:G5)Вставить функцию нас важно, чтобы
|
Примеры работы функции
|
совпадением?
|
уравнений. Полученные результаты: & «(» & 0End Function
|
Описания функций создавать не
|
любой функции нажав
|
находиться между операторами строке формулы. имени функции в сложение, вычитание, умножение
|
для назначения буквенной
|
категориями функций, можнов поле
support.office.com>
Краткое руководство: использование функций в формулах
комбинацию горячих клавиш Sub и EndПопробуйте создать формулу с ячейке, за которым и деление, в Microsoft Excel категории оценке в также выбрать категорию. Значение_если_истинаЗнак равенства ( вам полезна. Просим целесообразной корреляции спроса ПОИСКПОЗ по нескольким функций в Excel & «)»End Function расчет с ее в случаях, если SHIFT+F3. Но наша Sub, пользовательские функции вложенными функциями, т. е. следует открывающую круглую
можно использовать большую ячейке A3.Чтобы ввести другую функциюфункции= вас уделить пару и объема производимых критериям Excel.Мы создали свою пользовательскую
ElseIf b =Проверки корректности введенных данных использованием:
-
пользовательские функции будут
-
функция пока еще обозначают операторами Function
-
формулу, содержащую функцию, скобку; Например, библиотеку встроенных функций
-
=ЕСЛИ(A3>89,»A»,ЕСЛИ(A3>79,»B»,ЕСЛИ(A3>69,»C»,ЕСЛИ(A3>59,»D»,»F»))))
-
в качестве аргумента,
Инструкции
|
ЕСЛИ) будет вставлен автоматически. секунд и сообщить,
|
|
квадратных уравнений, которой < 0 Then кода. Если пол
Категория вам, с помощью помощью наклона линейной в Excel – раньше не былоanswer1 = «Единственный не определен, функция ячейки с целью необходимо выполнить следующие пользовательской функции входятПоработайте с функциями, которые
. Эти функции можно использовать для назначения буквенной построитель формул или для завершения формулы.выберите пункт кнопок внизу страницы. регрессии. мощный инструмент поиска в Excel по корень — « вернет результат 0 получения результатов дляПример 1. Рассчитать сумму действия:
|
|
название (произвольное имя, раньше не использовали,После открывающей круглой скобки
категории оценке в непосредственно в ячейку.Вместо того, чтобы вводитьВсе Для удобства такжеОкругление до целого числа данных. Выборка значений умолчанию.
|
Дальнейшие действия
-
SquareEquation = answer1 (нуль). остальных работников: отпускных для каждогоСоздайте новый макрос (нажмите
-
отражающее ее суть), и посмотрите, возвращают в случае необходимости операций, как: ячейке A4.
support.office.com>
Примеры как создать пользовательскую функцию в Excel
Введите дополнительные аргументы, необходимые ссылки на ячейки,. приводим ссылку на функциями ОКРУГЛ и по нескольким критериямПримеры применения сложных & «(» &Пример расчета для первогоПример 2. Рассчитать суточную работника, проработавшего на комбинацию клавиш Alt+F8),
Пример создания своей пользовательской функции в Excel
список параметров (аргументов) ли они ожидаемые можно ввести одинполучение текущей даты;=ЕСЛИ(A4>89,»A»,ЕСЛИ(A4>79,»B»,ЕСЛИ(A4>69,»C»,ЕСЛИ(A4>59,»D»,»F»)))) для завершения формулы.
- можно также выделитьЕсли вы знакомы с оригинал (на английском
- FormatNumber в VBA. отбора. формул и функций Sqr(a / c)
- участника: норму калорий для предприятии не менее в появившемся окне с объявлением их значения.
- или несколько аргументов —поиск набора символов в
- Советы:Завершив ввод аргументов формулы, ячейки, на которые категориями функций, можно языке) . В результате использования автозаполнения
- среди которых есть основе суммы общей нового макроса, нажмите требуются (некоторые могут встроенных функций, которые Excel покажет, данныеобработка текста, например преобразование
- Для получения дополнительных сведенийНиже приведен пример использования кнопкуЕсли вы не знаете, одного из аргументов целого используя стандартную в Excel. Управление данными в
2 — 4 получим следующие результаты: как женщины, так заработной платы и кнопку Создать: не принимать аргументов), могут быть использованы какого типа следует слова «привет» в о формулах в вложенных функций ЕСЛИ
, чтобы свернуть какую функцию использовать, формулы, использующей функцию
- функцию ОКРУГЛ иПримеры работы функции электронных таблицах. * a *Пример 3. Создать функцию, и мужчины определенного
- числа выходных днейВ результате будет создан тип возвращаемого значения, для инженерных, статистических, ввести в качестве
- «Привет» или «ПРИВЕТ»; общем см Обзор для назначения буквенных диалоговое окно, выделите можно ввести вопрос, называется вложения, и
- VBA-функции FormatNumber или ПОИСКПОЗ для поискаПримеры функции ГПР в c >= 0 которая возвращает результаты возраста с известными в году. новый модуль с тело функции (код, финансовых, аналитических и аргумента. Это можетрасчет выплаты по ссуде; формул.
- категорий числовым результатам ячейки, на которые описывающий необходимые действия, мы будем воспринимают Round. Алгоритм банковского точного и ближайшего Excel пошаговая инструкция Then
решения квадратных уравнений показателями роста иВид исходной таблицы данных: заготовкой, ограниченной операторами отражающий логику ее прочих расчетов. Иногда
быть число, текст
Примеры использования пользовательских функций, которых нет в Excel
сравнение содержимого двух ячеек.Список доступных функций см. тестирования. нужно создать ссылки, в поле этой функции в округления до целого большего или меньшего для чайников.
answer1 = «Первый
для указанных в веса.Каждому работнику полагается 24
- Sub и End работы), а также
- условия поставленных задач или ссылка на
Начало ввода данных в в разделе ФункцииСкопируйте образец данных из
и нажмите кнопку
Поиск функции качестве вложенные функции. числа.
значения в диапазонеПрактическое применение функции корень - "
ячейках коэффициентах a,Вид исходной таблицы данных:
выходных дня с
Sub. оператор End Function. требуют более гибкого
другую ячейку.
ячейку
Excel (по алфавиту) следующей таблицы и, чтобы снова
(например, при вводе
К примеру, добавив
Функция ПРЕДСКАЗ для прогнозирования ячеек. Как сравнить ГПР для выборки
answer2 = «Второй
b и cДля расчета используем формулу выплатой S=N*24/(365-n), где:Введите код, как показано
Калькулятор расчета калорий в Excel
Пример простой пользовательской инструмента для поискаНапример, функция или Функции Excel вставьте их в развернуть диалоговое окно. «добавить числа» возвращается вложенные функции СРЗНАЧ
будущих значений в
на совпадение значений значений из таблиц корень — « уравнения типа ax2+bx+c=0. Миффлина — СанN – суммарная зарплата на рисунке ниже,
функции, возвращающей названия решения, тогда наABSВведите в ячейку знак (по категориям).
ячейку A1 новогоСовет:
функция и сумм в Excel. двух таблиц? по условию. Примеры
SquareEquation = answer1Вид исходной таблицы:
Жеора, которую запишем за год; указав требуемое количество дня недели в помощь приходят макросы
принимает в качестве равенства (
Примечание:
листа Excel. Чтобы
Для получения дополнительных сведенийСУММ аргументов функции Если,Примеры анализов прогнозированиеПримеры функции ИНДЕКС для использования функции ГПР
& «(» &Для решения создадим следующую
в коде пользовательской
n – число праздничных переменных (в зависимости
Пользовательская функция для решения квадратных уравнений в Excel
зависимости от указанного и пользовательские функции. аргумента одно число.= Мы стараемся как можно отобразить результаты формул, о функции и
).
следующая формула суммирует будущих показателей с
создания массивов значений
для начинающих пользователей. 2 -Код примера:
пола участника. КодСоздадим пользовательскую функцию для пользовательской функции): рисунке ниже:
могут быть созданыПРОПИСН (например, "а"), чтобы
актуальными справочными материалами нажмите клавишу F2,
ссылку в качестве аргумента, G5) только в при определенных условиях.
Примеры работы функции Excel для выборки 4 * aPublic Function SquareEquation(a As примера:
расчета на основеВ качестве «Macro» должна
После ввода представленного выше с использованием языка
(которая преобразует строчные просмотреть список доступных на вашем языке. а затем — клавишуСправка по этой функции введите функцию в том случае, если Как спрогнозировать объем ИНДЕКС для динамической значений по условию.
* c)) / Integer, b AsPublic Function CaloriesPerDay(sex As данной формулы: быть передана текстовая кода необходимо нажать VBA. Для реализации
буквы в прописные)
функций. Эта страница переведена
ВВОД. При необходимости
.
поле этого аргумента.
среднее значение другого
продаж или спрос выборки и фильтрации
Примеры работы функции (2 * a)
Integer, c As String, age AsКод примера: строка с названием комбинацию клавиш Ctrl+S данной задачи необходимо
exceltable.com>
Функции Excel с примерами и описанием для практического применения
принимает текстовую строку.Для прокрутки списка используйте автоматически, поэтому ее измените ширину столбцов,После ввода всех аргументовЧасти формулы, отображенные в
Примеры использования функций
набора чисел (F2: на товары в значений из исходной
ВПР для вертикального & «)» & Integer) As String Integer, weight AsPublic Function Otpusknye(summZp As пользовательской функции, в или специальный значок выполнить следующие действия: Функция
клавишу СТРЕЛКА ВНИЗ. текст может содержать чтобы видеть все формулы нажмите кнопку диалоговом окне F5) больше 50. Excel? 1 2 таблицы. Как сделать просмотра таблиц при «; » &Dim answer1 As Integer, height As
Long, holidays As качестве «Description» - в левом верхнемОткрыть редактор языка VBAПИПри этом для каждой неточности и грамматические данные.ОКАргументы функции В противном случае
3 4 5 массив значений ячеек поиске значений по _ String Integer) As Integer Long) As Long переменная типа String углу редактора кода с помощью комбинации
не принимает аргументов, функции будет отображаться ошибки. Для насОценка., отображают функцию, выбранную возвращает значение 0. 6 7 8 диапазона? строкам. Сравнение двухanswer2 & «(«
Dim answer2 AsIf sex =If IsNumeric(holidays) = с текстом описания для сохранения. клавиш ALT+F11. поскольку она просто всплывающая подсказка с важно, чтобы эта45
Щелкните ячейку, в которую на предыдущем шаге. 2If a =CaloriesPerDay = 10 = False Then качестве «ArgumentDescriptions» - необходимо вернуться к пункт Insert и (3,14159…). всплывающая подсказка для полезна. Просим вас
78Чтобы начать формулу сЕСЛИ Если. 15 16 17 . учетом критериев поиска. — 4 * 0 Then * weight +Otpusknye = «Введены массив переменных типа табличному редактору Excel,
exceltable.com>
подпункт Module, как
- Функция в excel пстр
- Функция найти в excel
- Ряд функция в excel
- Sumif функция в excel
- В excel функция subtotal
- Создать фильтр в excel
- Функция или в excel примеры
- Функция всд в excel
- Как в excel убрать функцию
- Функция ранг в excel примеры
- В excel функция значен
- Функция в excel не равно
Создание пользовательской функции в Excel — UDF
Как создать пользовательскую функцию рабочего листа в Excel. Они называются пользовательскими функциями или UDF, и они потрясающие. Вы можете создать свою собственную функцию, которая делает почти все, что вы хотите.
Чтобы сделать эти функции, нам просто нужно немного VBA, так как они в основном макросы.
Разделы:
Действия по созданию пользовательской функции в Excel
Добавление аргументов к функции
Использование VBA в функции
Окончательный результат: пользовательская функция Excel
Примечания
Действия по созданию пользовательской функции в Excel
- Нажмите Alt + F11 , чтобы перейти в окно редактора VBA.
- Перейти к Вставить > Модуль
Теперь вы должны увидеть окно, которое выглядит следующим образом: - В этом окне введите Функция и имя вашей функции, а затем открывающую и закрывающую скобки, а затем нажмите Enter. Я назвал свою функцию CountCharacters
Вы можете дать своей функции практически любое имя, которое еще не используется для функций.
После этого окно автоматически добавит в окно End Function , и оно должно выглядеть примерно так: - Поместите код в функцию, чтобы она что-то делала.
Здесь я просто установлю переменную, равную некоторому тексту, который я хочу вывести.outputText = "Это вывод."
- Теперь нам нужно поместить вывод нашей функции в переменную с ТАКИМ же именем, что и у нашей функции.
Для этого я добавляю эту строку кода в конец кода функции:CountCharacters = outputText
- Нажмите Alt + F11 , чтобы вернуться в Excel и ввести новую функцию в ячейку.
Обратите внимание, что когда я начинаю вводить имя функции, оно появляется в раскрывающемся списке функций для Excel.
Когда вы закончите ввод функции, нажмите Enter, как если бы вы использовали обычную функцию. - Вот оно! Вот окончательный результат.
В этом примере я создал простейшую форму UDF или определяемой пользователем функции.
Каждая созданная пользователем функция будет следовать базовой структуре, описанной в этом примере, а именно:
- Функции должны начинаться с Функция , затем имя, которое вы хотите дать этой функции, а также открывающая и закрывающая скобки. Аргументы могут заключаться в круглые скобки, как описано ниже в другом примере.
- Функции должны заканчиваться текстом End Function , который обычно вводит окно Excel VBA.
- Чтобы сгенерировать выходные данные функции и отправить их обратно в Excel, необходимо присвоить выходные данные функции переменной с тем же именем, что и у вашей функции.
Добавление аргументов к функции
Давайте теперь добавим аргумент к функции, чтобы сделать ее более полезной.
Аргументы — это части функции, в которые вы можете вводить данные или выбирать ячейку с данными, которые вы хотите использовать в своей функции. Аргументы — это то, как вы получаете данные в свою функцию.
На самом деле это очень просто; мы просто вводим текст между скобками после имени функции, и этот текст будет аргументом.
Давайте начнем с примера, который мы сделали выше:
Теперь добавим текст в скобках:
Я поставил input_value в качестве аргумента. Обратите внимание, что вы не можете использовать пробелы для имен, вместо этого разделяйте слова с помощью символов подчеркивания.
Теперь, когда у нас есть input_value в качестве аргумента, мы можем использовать его внутри функции. Вот как мы получаем данные от пользователя в функцию.
Чтобы сделать эту функцию более динамичной, поскольку в настоящее время она выводит только жестко запрограммированный текст «Это вывод», я установлю переменную outputText равной новому аргументу input_value.
Вернитесь в Excel (нажмите Alt + F11 ) и попробуем эту функцию на другой ячейке.
Вот результат:
Теперь эта простая функция выводит любой переданный ей текст, в данном случае текст из ячейки A1.
Несколько аргументов
У вас может быть несколько аргументов, просто разделите их запятой, например:
Функция MyFunctionName(Аргумент_1, Аргумент_2 и т. д.)
Использование VBA в функции
Мы создаем эту функцию, используя VBA (Visual Basic для приложений), то же самое, что мы используем для обычных макросов. Таким образом, мы можем делать много интересных и мощных вещей. Теперь функции не могут делать все то, что может делать обычный макрос, потому что цель функции — вернуть результат обратно в ячейку, но вы все еще можете делать многое.
Давайте закончим функцию, которую мы начали создавать, и заставим ее считать все символы в ячейке.
Для этого добавим функцию VBA len , которая используется для подсчета длины значения, которое вы в нее помещаете.
Я хочу подсчитать входные данные для этой функции, которые предоставляются через переменную input_value , поэтому мне нужно поместить это в функцию len.
Это:
outputText = input_value
Станет таким:
outputText = длина (входное_значение)
Поскольку остальная часть функции уже настроена для вывода значения, хранящегося в переменной outputText , мне больше ничего менять не нужно.
Вот окончательный код функции:
Вернитесь в Excel и попробуйте прямо сейчас.
Выходы:
Теперь у нас есть функция, которая подсчитывает количество символов в ячейке и выдает нам результат.
Окончательный результат: пользовательская функция Excel
Это был очень простой пример использования VBA для создания функции, но вы можете включить много строк кода в зависимости от сложности того, что вы пытаетесь сделать. В этом примере я старался не усложнять, чтобы дать вам представление о том, как все работает, чтобы вы могли опираться на него.
Вот окончательная версия созданного кода:
Функция CountCharacters(input_value) outputText = Len (входное_значение) Количество символов = выходной текст Конечная функция
Примечания
Пользовательские функции Excel, или пользовательские функции, просто великолепны. Это один из моих любимых аспектов Excel, потому что он позволяет легко создать функцию, которая делает почти все, что вы хотите. Если у вас есть повторяющиеся задачи, которые требуют много шагов или требуют сложной формулы, которую трудно запомнить, вы можете создать пользовательскую функцию, которая сделает всю работу за вас.
Пример, который я создал выше, сам по себе не является полезной пользовательской функцией, так как уже есть LEN() в Excel, но она должна помочь вам понять, как создаются и используются пользовательские функции.
Пользовательские функции доступны только в рабочей книге, в которой они у вас есть, или когда эта рабочая книга открыта и вы ссылаетесь на них, используя правильный метод между книгами, что довольно раздражает. В другом уроке я покажу вам, как сделать их доступными везде.
Обязательно загрузите прилагаемую книгу, чтобы увидеть окончательный результат и получить код.
Excel Функция, определяемая ПОЛЬЗОВАТЕЛЕМ, с VBA (UDF)
Почему вы должны создать пользовательскую функцию Excel
1. Когда для этого нет функции
2. Замена сложной формулы
3. Когда вы не хотите использовать подпрограмму SUB
Как создать свою первую Пользовательская функция в Excel
Как эта функция работает и возвращает значение в ячейке
Как улучшить UDF навсегда
Как использовать пользовательскую функцию VBA
1. Просто на листе
2. Использование в другом Подпроцедуры и функции
3. Доступ к функциям из другой книги
Различные способы создания пользовательской функции VBA [продвинутый уровень]
1. Без каких-либо аргументов
2. Только с одним аргументом
3. С несколькими аргументами
a 3. Пользовательская функция с необязательным и обязательным аргументом
4. Использование массива в качестве аргумента
Область действия пользовательской функции
1. Общедоступная
2. Частная
Ограничения функции, определяемой пользователем [UDF]
Есть ли разница между встроенной функцией и функцией, определяемой пользователем?
Заключение
Связанные учебные пособия
Возможно, одним из самых крутых преимуществ изучения VBA является возможность создавать свои собственные функции.
В Excel имеется более 450 функций, и некоторые из них очень полезны в вашей повседневной работе. Но Excel дает вам возможность создавать собственные функции с помощью VBA. Да, вы правильно поняли. Функция USER DEFINED, сокращенно UDF, или вы также можете назвать ее пользовательской функцией VBA.
И я могу с уверенностью сказать, что каждый начинающий пользователь VBA хочет научиться создавать определяемые пользователем функции. Не так ли? Скажите «Да» в разделе комментариев, если вы один из тех людей, которые хотят создать пользовательскую функцию.
Я рад сообщить вам, что это ПОЛНОЕ РУКОВОДСТВО, которое поможет вам создать свою первую пользовательскую функцию с помощью VBA, и, кроме того, я поделился некоторыми примерами определяемых пользователем функций, чтобы помочь вам вдохновиться.
- Здесь я буду использовать слова «определяемая пользователем функция», «пользовательская функция» и «определяемая пользователем функция» как взаимозаменяемые. Так что оставайтесь со мной, через пару минут вы станете рок-звездой VBA.
- Чтобы создать код для пользовательской функции VBA, вам нужно его написать, вы не можете записать его с помощью макрорекордера.
Зачем создавать пользовательскую функцию Excel
Как я уже сказал, в Excel есть множество встроенных функций, которые могут помочь вам решить почти все проблемы и выполнить все виды расчетов. Но, иногда, в определенных ситуациях, вам нужно создать UDF.
И ниже я перечислил некоторые причины или ситуации, в которых вам нужно использовать пользовательскую функцию.
1. Когда для этого нет функции
Это одна из частых причин создания пользовательской функции с помощью VBA, потому что иногда вам нужно что-то вычислить, а для этого нет специальной функции. Я могу привести вам пример подсчета слов в ячейке, и я обнаружил, что UDF может быть идеальным решением.
2. Заменить сложную формулу
Если вы работаете с формулами, я уверен, вы знаете, что сложные формулы трудно читать, а иногда и труднее понять другим. Таким образом, пользовательская функция может решить эту проблему, потому что после создания UDF вам не нужно снова и снова писать эту сложную формулу.
3. Если вы не хотите использовать подпрограмму SUB
Вы можете использовать код VBA для выполнения вычислений, но коды VBA не являются динамическими*. Вам нужно снова запустить этот код, если вы хотите обновить свой расчет. Но если вы преобразуете этот код в функцию, вам не нужно запускать этот код снова и снова, поскольку вы можете просто вставить его как функцию.
Как создать свою первую определяемую пользователем функцию в Excel
Хорошо, смотрите. Я разделил весь процесс на три этапа:
- Объявление вашей процедуры как функции
- Определение ее аргументов и их типов данных
- Добавить код для вычисления желаемого значения
Но позвольте мне дать вам: дня из значения даты. Итак, у нас есть функция, которая возвращает номер дня недели, но не название. Вы поняли, что я говорю? Да?
Итак, давайте выполним следующие шаги, чтобы создать вашу первую определяемую пользователем функцию:
- Прежде всего, откройте редактор Visual Basic с помощью сочетания клавиш ALT + F11 или перейдите на вкладку «Разработчик» и просто нажмите кнопку «Visual Basic».
- Следующее, что нужно сделать, это вставить модуль, поэтому щелкните правой кнопкой мыши окно проекта VBA, затем перейдите к вставке и после этого нажмите «Модуль». (ПРЕДУПРЕЖДЕНИЕ: вам нужно вводить USER DEFINED FUNCTION только в стандартные модули. Модули Sheet и ThisWorkbook являются модулями особого типа, и если вы вводите UDF в эти два модуля, Excel не распознает, что вы создаете UDF).
- Третье — определить имя для функции, и здесь я использую «myDayName». Поэтому вы должны написать «Function mydayName». Почему функция перед именем? Поскольку вы создаете функцию VBA, использование слова «Функция» сообщает Excel о том, что этот код следует рассматривать как функцию (обязательно прочитайте область действия пользовательской функции в посте).
- После этого вам нужно определить аргументы для вашей функции. Поэтому вставьте начальные скобки и напишите «InputDate As Date». Здесь InputDate — это имя аргумента, а дата — его тип данных. Всегда лучше определить тип данных для аргумента.
- Теперь закройте скобки и напишите «Как строку». Здесь вы определяете тип данных результата, возвращаемого функцией, и, как вы хотите, имя дня, которое является текстом, поэтому его тип данных должен быть «String». Если вы хотите получить результат, отличный от строки, обязательно определите его тип данных в соответствии с этим. (Функция myDayName (InputDate As Date) As String).
- В конце нажмите ENTER. На этом этапе имя вашей функции, ее аргумент, тип данных аргумента и тип данных функции определены, и у вас есть что-то вроде следующего в вашем модуле:
- Теперь в «Функции» и «Конечной функции» вам нужно определить расчет или, можно сказать, работу этой UDF. В Excel есть функция рабочего листа под названием «Текст», и мы используем ее здесь. И для этого вам нужно написать приведенный ниже код, и с помощью этого кода вы определяете значение, которое должно быть возвращено функцией. myDayName = WorksheetFunction.Text(InputDate, «dddddd»)
- Теперь закройте редактор VB, вернитесь к рабочему листу и в ячейке B2 введите «=myDayName(A2)», нажмите Enter, и у вас будет день имя.
Поздравляем! Вы только что создали свою первую определяемую пользователем функцию. Это момент настоящей Радости. Не так ли? Напишите «Радость» в разделе комментариев.
Как эта функция работает и возвращает значение в ячейке
Здесь находится ваша первая пользовательская функция, но дело в том, что вам нужно понять, как она работает. Если говорить простыми словами, это код VBA, но вы использовали его как функциональную процедуру. Давайте разделим его на три части:
- Вы вводите его в ячейку как функцию и указываете входное значение.
- Excel запускает код функции и использует указанное вами значение.
- Вы получили результат в ячейке.
Но нужно понимать, как эта функция работает изнутри. Поэтому я разделил весь процесс на три разные части, где вы можете увидеть, как на самом деле работает код, который вы написали для функции.
Поскольку вы указали «InputDate» в качестве аргумента для функции, и когда вы вводите функцию в ячейку и указываете дату, VBA берет это значение даты и передает его текстовой функции, которую вы использовали в коде.
А в примере, который я упомянул выше, в ячейке A1 указана дата 01 января 2019 года.
После этого функция ТЕКСТ преобразует эту дату в день, используя код формата «dddddd», который вы уже упомянули в коде функции. И тот день, который возвращается функцией ТЕКСТ, назначается «myDayName».
Таким образом, если результатом функции ТЕКСТ является вторник, это значение будет присвоено «myDayName».
На этом работа функции подходит к концу. «myDayName» — это имя функции, поэтому любое значение, присвоенное «myDayName», будет значением результата, и функция, которую вы вставили на лист, вернет его в ячейку.
Как навсегда улучшить UDF
Итак, вы знаете, как создать пользовательскую функцию VBA.
Теперь…
Есть одна вещь, которую вам нужно позаботиться о том, чтобы код, который вы использовали для работы, был достаточно хорош для обработки всех возможностей. Если вы говорите о функции, которую вы только что написали выше, она может вернуть имя дня из даты.
Но…
Что делать, если указанное вами значение не является датой? А если указанная вами ячейка пуста? Могут быть и другие варианты, но я уверен, что вы меня поняли.
Верно? Итак, давайте попробуем улучшить эту пользовательскую функцию, которая могла бы справиться с вышеуказанными проблемами. Хорошо. Прежде всего, вам нужно изменить тип данных аргумента и использовать:
InputDate As Variant
При этом ваша пользовательская функция может принимать данные любого типа в качестве входных данных. Затем нам нужно использовать оператор VBA IF, чтобы проверить InputDate для некоторых условий. Первое условие — пуста ячейка или нет. И для этого вам нужно использовать следующий код:
Если ДатаВвода = "" Тогда
myDayName = ""
Это приведет к тому, что функция вернет пустое значение, если указанная вами ячейка пуста.
Одна проблема решена, переходим к следующей. Помимо даты есть возможности, что вы можете иметь число или текст. Итак, для этого вам также необходимо создать условие, которое должно проверять, является ли указанное значение фактической датой или нет.
Код будет таким:
Если IsDate(InputDate) = False Тогда
myDateName = ""
Здесь я использую пробел для обоих условий, так что если у вас есть большие данные, вы можете легко отфильтровать значения, где входное значение недействительно. Итак, после добавления вышеуказанных условий код будет выглядеть так:
Функция myDayName(InputDate As Variant) As String
Если ДатаВвода = "" Тогда
имя дня = ""
Еще
Если IsDate(InputDate) = Ложь Тогда
мояДатаИмя = ""
Еще
myDayName = WorksheetFunction.Text (InputDate, "dddddd")
Конец, если
Конец, если
Завершить функцию
Вот как это работает сейчас: я уверен, что вы все еще можете внести некоторые изменения в эту функцию, но я уверен, что вы ясно поняли мою мысль.
Как использовать пользовательскую функцию VBA
К этому моменту вы в значительной степени поняли, как создать функцию VBA в Excel. Но раз у вас есть это, вы должны знать, как вы можете использовать его. И в этой части поста я собираюсь поделиться с вами тем, как и где вы можете его использовать. Итак, давайте приступим к делу.
1. Просто в рабочем листе
Зачем мы создаем пользовательскую функцию? Простой. Чтобы использовать его на листе. Вы можете просто ввести UDF на листе, используя знак равенства и введите имя функции, а затем укажите ее аргументы.
Вы также можете ввести пользовательскую функцию из библиотеки функций. Перейдите на вкладку «Формула» ➜ «Вставить функцию» ➜ «Определено пользователем».
Из этого списка вы можете выбрать UDF, который хотите вставить.
2. Использование в других подпроцедурах и функциях
Вы также можете использовать функцию в других функциях или в «подпроцедуре». Ниже приведен код VBA, в котором вы использовали функцию для получения названия дня для текущей даты.
ПодсегодняДень()
MsgBox "Сегодня" и myDayName(Дата)
End Sub
Обязательно прочитайте раздел «Область действия UDF» в этом посте, чтобы узнать больше об использовании функции в других процедурах.
3. Доступ к функциям из другой рабочей книги
Если у вас есть пользовательская функция в одной рабочей книге, и вы хотите использовать ее в другой рабочей книге или во всех рабочих книгах, вы делаете для этого надстройку. Выполните следующие простые шаги:
- Прежде всего, вам необходимо сохранить файл (в котором у вас есть код пользовательской функции) в качестве надстройки.
- Для этого перейдите на вкладку «Файл» ➜ «Сохранить как» ➜ «Надстройки Excel (.xalm).
- После этого дважды щелкните надстройку и установите ее.
Вот и все. Теперь вы можете использовать все свои функции VBA в любой книге.
Различные способы создания пользовательской функции VBA [Продвинутый уровень]
К этому моменту вы знаете, как создать пользовательскую функцию в VBA. Но дело в том, что когда мы используем встроенные функции, они имеют разные типы аргументов.
Итак, в этом разделе этого руководства вы узнаете, как создать UDF с различными типами аргументов.
- Без каких -либо аргументов
- с одним аргументом
- с множественными аргументами
- с использованием массива в качестве аргумента
… дайте в будущем.
1. Без каких-либо аргументов
Вы помните такие функции, как СЕЙЧАС и СЕГОДНЯ, где не нужно вводить никаких аргументов?
Да. Вы можете создать определяемую пользователем функцию, в которой вам не нужно вводить аргумент. Давайте сделаем это на примере:
Давайте создадим пользовательскую функцию, которая может возвращать местоположение текущего файла. А вот код:
Функция myPath() As String
Dim myLocation As String
Dim myName As String
myLocation = ActiveWorkbook. FullName
моеИмя = ActiveWorkbook.Имя
Если моеМестоположение = моеИмя Тогда
myPath = "Файл еще не сохранен."
Еще
мой путь = мое местоположение
Конец, если
Завершить функцию
Эта функция возвращает путь к местоположению, где хранится текущий файл, и, если рабочая книга нигде не хранится, будет отображаться сообщение «Файл еще не сохранен».
Теперь, если вы внимательно посмотрите на код этой функции, вы не определили ни одного аргумента (в скобках). Вы только что определили тип данных для результата функции.
Основное правило создания функции без аргумента — код, в котором не нужно ничего вводить.
Проще говоря, значение, которое вы хотите получить в ответ от функции, должно быть рассчитано автоматически.
И в этой функции у вас то же самое.
Этот код ActiveWorkbook.FullName возвращает расположение файла, а этот код ActiveWorkbook.Name возвращает имя. Вам не нужно ничего вводить.
2. Только с одним аргументом
Мы уже рассмотрели этот вопрос, изучая, как создать пользовательскую функцию. Но давайте копнем немного глубже и создадим другую функцию. Это функция, которую я создал несколько месяцев назад для извлечения URL-адреса из гиперссылки.
Функция giveMeURL(rng As Range) As String
При ошибке Возобновить Далее
giveMeURL = rng.Hyperlinks(1).Address
End Function
Теперь в этой функции у вас есть только один аргумент.
Когда вы вводите это в ячейку, а затем указываете ячейку, в которой у вас есть гиперссылка, она возвращает URL-адрес из гиперссылки. Сейчас в этой функции основную работу выполняют:
rng.Hyperlinks(1).Address
А вот rng нужно указать. Скажите «Легко» в разделе комментариев, если вам кажется, что создать UDF легко.
3. С несколькими аргументами
Обычно большинство встроенных функций Excel имеют несколько аргументов. Поэтому вам необходимо научиться создавать пользовательскую функцию с несколькими аргументами.
Возьмем пример: вы хотите удалить определенные буквы из текстовой строки и оставить остальную часть.
Итак, у вас есть такие функции, как RIGHT и LEN, которые вы собираетесь использовать в этой пользовательской функции. Но здесь нам это не нужно. Все, что нам нужно, это пользовательская функция, использующая VBA.
Итак, вот функция:
Функция removeFirstC(rng As String, cnt As Long) As String
removeFirstC = Right(rng, Len(rng) - cnt)
End Functio
OK, так что смотрите:
В этой функции у вас два аргумента:
- rng: В этом аргументе вам нужно указать ячейку, из которой вы хотите удалить первый символ текста.
- cnt: А в аргументе нужно указать количество удаляемых символов (Если вы хотите удалить более одного символа из текста).
Когда вы вводите его в ячейку, он работает примерно так:
3.1 Создание пользовательской функции с необязательным, а также обязательным аргументом
Если вы думаете о функции, которую мы только что создали в приведенном выше примере, где у вас есть два разных аргумента, ну оба нужны. И если вы пропустите какой-либо из них, вы получите такую ошибку.
Теперь, если подумать логически, созданная нами функция должна удалить первый символ. Но здесь нужно указать количество удаляемых символов. Итак, я хочу сказать, что этот аргумент должен быть необязательным и должен принимать значение по умолчанию.
Что вы думаете?
Скажите «Да» в разделе комментариев, если вы согласны со мной в этом.
ОК так смотрите. Чтобы сделать аргумент необязательным, вам просто нужно добавить «Необязательный» перед ним. Вот так:
Но важно, чтобы ваш код работал со значением этого аргумента или без него. Итак, наш новый код для той же функции будет таким: Теперь в коде, если пропустить указание второго аргумента.
4. Использование массива в качестве аргумента
Существует несколько встроенных функций, которые могут принимать аргументы в виде массива, и вы также можете создать собственную функцию VBA для этого.
Давайте рассмотрим простой пример, когда вам нужно создать функцию, в которой вы суммируете значения из диапазона, в котором у вас есть числа и текст. Вот так.
Функция addNumbers (CellRef как диапазон)
Затемнить ячейку как диапазон
Для каждой ячейки в CellRef
Если IsNumeric(Cell.Value) = True Тогда
Результат = Результат + Cell.Value
Конец, если
Следующая ячейка
addNumbers = Результат
Завершить функцию
В приведенном выше коде функции мы использовали весь диапазон A1:A10 вместо одного значения или ссылки на ячейку.
При использовании цикла FOR EACH проверяется каждая ячейка диапазона и суммируется значение, если в ячейке есть число.
Область действия определяемой пользователем функции
Проще говоря, область действия функции означает, может ли она быть вызвана из других процедур или нет. Пользовательская функция может иметь два разных типа областей действия.
1. Общедоступная
Пользовательскую функцию можно сделать общедоступной, чтобы ее можно было вызывать на всех листах рабочей книги. Чтобы сделать функцию общедоступной, вам просто нужно использовать слово «Общедоступная», как показано ниже.
Но функция по умолчанию является общедоступной, если вы не сделаете ее частной. Во всех примерах, которые мы рассмотрели, все являются общедоступными.
2. Частная
Когда вы делаете функцию частной, вы можете использовать ее в процедурах того же модуля.
Допустим, если у вас есть UDF в «Module1», вы можете использовать его только в процедурах, которые есть в «Module1». И он не появится в списке функций рабочего листа (когда вы используете знак = и пытаетесь ввести имя), но вы все равно можете использовать его, введя его имя и указав аргументы.
Ограничения определяемой пользователем функции [UDF]
Пользовательские функции очень полезны. Но они ограничены в некоторых ситуациях. Вот несколько вещей, которые я хочу, чтобы вы записали и помнили при создании пользовательской функции в VBA.
- Вы не можете изменять, удалять или форматировать ячейки и диапазон с помощью пользовательской функции.
- Также нельзя перемещать, переименовывать, удалять или добавлять листы в книгу.
- Внесите изменение в значение другой ячейки.
- Он также не может вносить изменения ни в один из параметров среды,
… нажмите здесь, чтобы прочитать более подробную информацию на веб-сайте Microsoft.
Есть ли разница между встроенной функцией и пользовательской функцией?
Рад, что вы спросили. Что ж, чтобы ответить на этот вопрос, я хочу поделиться некоторыми моментами, которые, по моему мнению, вам важно знать.
- Медленнее, чем встроенные: Если вы сравните скорость встроенных функций и функций VBA, вы обнаружите, что раньше они были быстрее. Причина этого в том, что встроенные функции написаны с использованием C++ или FORTRAN.
- Файлы, которыми трудно поделиться: Мы часто обмениваемся файлами по электронной почте и в облаке, поэтому, если вы используете какую-либо пользовательскую функцию, вам необходимо предоставить общий доступ к этому файлу в формате «xlam», чтобы другой человек также мог использовать вашу пользовательскую функцию.
Но, как я уже говорил выше в разделе « Зачем создавать пользовательскую функцию Excel », существуют определенные ситуации, когда вы можете использовать пользовательскую функцию VBA.
Заключение
Создать пользовательскую функцию очень просто. Все, что вам нужно сделать, это использовать «Функция» перед именем, чтобы определить ее как функцию, добавить аргументы, определить тип данных аргументов, а затем определить тип данных для возвращаемого значения.
В конце добавьте код для вычисления значения, которое вы хотите получить в ответ от функции. Это руководство, которым я поделился с вами сегодня, является самым простым, чтобы узнать, как создать пользовательскую функцию в VBA, и я уверен, что вы нашли его полезным.
А теперь скажи мне одну вещь.
Пользовательские функции полезны, как вы думаете?
Пожалуйста, поделитесь со мной своим мнением в разделе комментариев. Я хотел бы услышать от вас, и, пожалуйста, не забудьте поделиться этим постом со своими друзьями, я уверен, что они оценят это.