Оглавление
Сегодня мы продолжим изучение пользовательских функций Excel. Поскольку вы уже знаете, как создавать UDF (и, надеюсь, пробовали применять их в своем Excel), давайте копнем немного глубже и узнаем, как использовать и хранить пользовательские функции в Excel.
Более того, мы покажем вам, как легко сохранить функции в файле дополнений Excel, чтобы использовать их в дальнейшем в несколько кликов.
Итак, вот о чем мы будем говорить:
Различные способы использования UDF в Excel
Использование UDF в рабочих листах
Убедившись, что UDF работают правильно, вы можете использовать их в формулах Excel или в коде VBA.
Вы можете применять пользовательские функции в рабочей книге Excel так же, как и обычные функции. Например, просто напишите в ячейке следующую формулу:
= GetMaxBetween(A1:A6,10,50)
UDF можно использовать в сочетании с обычными функциями. Например, добавить текст к вычисленному максимальному значению:
= CONCATENATE("Максимальное значение между 10 и 50 равно ", GetMaxBetween(A1: A6,10,50))
Результат вы можете увидеть на скриншоте ниже:
Вы можете найти число, которое одновременно является максимальным и находится в диапазоне от 10 до 50.
Давайте проверим еще одну формулу:
= INDEX(A2:A9, MATCH(GetMaxBetween(B2:B9, F1, F2), B2:B9,0)), the
Пользовательская функция GetMaxBetween проверяет диапазон B2:B9 и находит максимальное число между 10 и 50. Затем, используя INDEX + MATCH, мы получаем название продукта, которое соответствует этому максимальному значению:
Как видите, использование пользовательских функций не слишком отличается от обычных функций Excel.
При этом помните, что определяемая пользователем функция может только возвращать значение, но не может выполнять никаких других действий. Подробнее об ограничениях определяемых пользователем функций.
Использование UDF в процедурах и функциях VBA
UDF также можно использовать в макросах VBA. Ниже показан код макроса, который ищет максимальное значение в диапазоне от 10 до 50 в столбце, содержащем активную ячейку.
Sub MacroWithUDF() Dim Rng As Range, maxcase, i As Long With ActiveSheet.Range(Cells(ActiveCell.CurrentRegion.Row, ActiveCell.Column), Cells(ActiveCell.CurrentRegion.Rows.Count _ + ActiveCell.CurrentRegion.Row - 1, ActiveCell.Column)) maxcase = GetMaxBetween(.Cells, 10, 50) i = Application.Match(maxcase, .Cells, 0) .Cells(i).Interior.Color = vbRed End With End SubКод макроса содержит пользовательскую функцию
GetMaxBetween(.Cells, 10, 50)
Он находит максимальное значение в активном столбце. Затем это значение будет выделено. Результат работы макроса вы можете увидеть на скриншоте ниже.
Пользовательская функция также может использоваться внутри другой пользовательской функции. Ранее в нашем блоге мы рассматривали проблему преобразования числа в текст с помощью пользовательской функции с именем SpellNumber .
С его помощью мы можем получить максимальное значение из диапазона и сразу же записать его в виде текста.
Для этого мы создадим новую пользовательскую функцию, в которой будем использовать функции GetMaxBetween и SpellNumber которые нам уже знакомы.
Function SpellGetMaxBetween(rngCells As Range, MinNum, MaxNum) SpellGetMaxBetween = SpellNumber(GetMaxBetween (rngCells, MinNum, MaxNum)) End FunctionКак вы можете видеть, в GetMaxBetween функция является аргументом другой пользовательской функции, SpellNumber Он определяет максимальное значение, как мы уже делали много раз. Затем это число преобразуется в текст.
На скриншоте выше вы можете видеть, как SpellGetMaxBetween функция находит максимальное число между 100 и 500, а затем преобразует его в текст.
Вызов UDF из других рабочих книг
Если вы создали UDF в своей рабочей книге, это, к сожалению, не означает, что вы вообще не столкнетесь с проблемами.
По моему опыту, большинство пользователей рано или поздно создают свою личную коллекцию макросов и пользовательских функций для автоматизации отдельных процессов и вычислений. И здесь возникает проблема - код пользовательских функций в Visual Basic нужно где-то хранить, чтобы потом использовать в работе.
Для применения пользовательской функции рабочая книга, в которой вы ее сохранили, должна быть открыта в вашем Excel. Если это не так, то при попытке ее использования вы получите ошибку #NAME! Эта ошибка указывает на то, что Excel не знает имени функции, которую вы хотите использовать в формуле.
Давайте рассмотрим, как можно использовать созданные вами пользовательские функции.
Способ 1. Добавьте имя рабочей книги в функцию
Перед именем функции можно указать имя рабочей книги, в которой она находится. Например, если вы сохранили пользовательскую функцию GetMaxBetween() в рабочей книге с именем Мои_функции.xlsm , то вы должны ввести следующую формулу:
= My_Functions.xlsm!GetMaxBetween(A1:A6,10,50)
Метод 2. Храните все UDF в одном общем файле
Сохраните все пользовательские функции в одной специальной рабочей книге (например, Мои_функции.xlsm ) и при необходимости скопируйте из него нужную функцию в текущую рабочую книгу.
Каждый раз при создании новой пользовательской функции необходимо дублировать ее код в рабочей книге, в которой она будет использоваться. При использовании этого метода может возникнуть несколько неудобств:
- Если рабочих файлов много, а функция нужна везде, то код придется копировать в каждую книгу.
- Не забудьте сохранить рабочую книгу в формате с поддержкой макросов (.xlsm или .xlsb).
- При открытии такого файла защита от макросов каждый раз будет выводить предупреждение, которое необходимо подтвердить. Многие пользователи пугаются, когда видят предупреждение в виде желтой полоски с просьбой включить макросы. Чтобы не видеть это сообщение, необходимо полностью отключить защиту Excel. Однако это не всегда правильно и безопасно.
Думаю, вы согласитесь со мной, что постоянно открывать файл и копировать из него код пользовательских функций или писать имя этого файла в формуле - не самое лучшее решение. таким образом, мы пришли к третьему способу.
Метод 3. Создание файла дополнения Excel
Я думаю, что лучший способ - хранить часто используемые пользовательские функции в файле дополнения Excel. Преимущества использования дополнения:
- Вам нужно подключить надстройку к Excel только один раз. После этого вы можете использовать ее процедуры и функции в любом файле на этом компьютере. Вам не нужно сохранять рабочие книги в форматах .xlsm и .xlsb, поскольку исходный код будет храниться не в них, а в файле надстройки.
- Вас больше не будет беспокоить защита макросов, поскольку дополнения всегда ссылаются на надежные источники.
- Дополнение - это отдельный файл. Его легко переносить с компьютера на компьютер, делиться им с коллегами.
Подробнее о создании и использовании надстройки мы поговорим позже.
Использование надстроек для хранения пользовательских функций
Как создать собственную надстройку? Давайте пройдемся по этому процессу шаг за шагом.
Шаг 1. Создание файла дополнения
Откройте Microsoft Excel, создайте новую рабочую книгу и сохраните ее под любым подходящим именем (например, My_Functions) в формате дополнения. Для этого используйте меню Файл - Сохранить как или клавишу F12. Обязательно укажите тип файла Надстройка Excel :
Ваша надстройка будет иметь расширение .xlam.
Совет. Обратите внимание, что по умолчанию Excel хранит дополнения в папке C:\Users\[Ваше_имя]\AppData\Roaming\Microsoft\AddIns я рекомендую принять расположение по умолчанию. При желании вы можете указать любую другую папку. Но тогда при подключении надстройки вам придется найти и указать ее новое расположение вручную. Если вы сохраните ее в папке по умолчанию, вам не придется искать надстройку на компьютере. Excel автоматически выведет ее в список.
Шаг 2. Подключите файл дополнения
Теперь созданное нами дополнение необходимо подключить к Excel. Тогда оно будет загружаться автоматически при запуске программы. Для этого воспользуйтесь меню Файл - Параметры - Дополнения . Убедитесь Надстройки Excel выбран в Управляйте поле. Нажмите на Перейти в нижней части окна. В появившемся окне отметьте наше дополнение My_Functions. Если вы не видите его в списке, нажмите кнопку Просмотреть и перейдите к расположению файла вашего дополнения.
Если вы используете надстройку для хранения пользовательских функций, необходимо соблюдать одно простое правило. Если вы передаете рабочую книгу другим людям, не забудьте также передать копию надстройки, содержащей нужную вам функциональность. Они должны подключить ее таким же образом, как вы это сделали сейчас.
Шаг 3. Добавление пользовательских функций и макросов в надстройку
Наша надстройка подключена к Excel, но она еще не обладает функциональностью. Чтобы добавить в нее новые UDF, откройте редактор Visual Basic, нажав Alt + F11. Затем вы можете добавить новые модули с помощью кода VBA, как описано в моем руководстве "Создание UDF".
Выберите файл вашего дополнения ( My_Finctions.xlam ) в окне VBAProject. Используйте кнопку Вставка - Модуль меню для добавления пользовательского модуля. В него нужно записать пользовательские функции.
Вы можете либо ввести код функции, определяемой пользователем, вручную, либо скопировать его откуда-нибудь.
Вот и все. Теперь вы создали свою надстройку, добавили ее в Excel и можете использовать в ней UDF. Если вы хотите использовать больше UDF, просто напишите код в модуле надстройки в редакторе VBA и сохраните его.
На сегодня это все. мы узнали, как использовать функции, определяемые пользователем, в рабочей книге. мы очень надеемся, что эти рекомендации будут вам полезны. если у вас есть вопросы, пишите в комментариях к этой статье.