Excel предоставляет множество функций для работы с листами, но иногда вам нужно что-то другое, что недоступно по умолчанию. В этом приеме приведено несколько примеров пользовательских функций, которые могут быть задействованы в формулах листов.
Процедуры-функции нужно помещать в обычный модуль VBA. Если в вашей книге нет модулей VBA, активизируйте Visual Basic Editor, найдите свою книгу в списке Project и выполните команду Insert ► Module.
Следующая функция USERNAME просто отображает имя пользователя — то имя, которое указано на вкладке Общие в диалоговом окне Параметры:
1 2 3 | Function USERNAME() USERNAME = Application.USERNAME End Function |
А вот формула листа, которая использует эту функцию: =USERNAME().
Следующая функция CELLHASFORMULA принимает аргумент (одну отдельную ячейку) и возвращает значение ИСТИНА, если в этой ячейке есть формула:
1 2 3 4 | Function CELLHASFORMULA(cell) As Boolean ' возвращает ИСТИНА, если в ячейке есть формула CELLHASFORMULA = cell.Range("A1").HasFormula End Function |
Если функции передается диапазон ячеек в виде аргумента, то она будет работать с верхней левой ячейкой в диапазоне.
Следующая функция SHEETNAME принимает один аргумент (диапазон) и возвращает имя листа, содержащего этот диапазон:
1 2 3 4 | Function SHEETNAME(rng) As String ' возвращает имя листа для rng SHEETNAME = rng.Parent.Name End Function |
Следующая функция W0RKB00KNAME возвращает название книги:
1 2 3 4 | Function WORKBOOKNAME() As String ' Возвращает имя книги ячейки, содержащей функцию WORKBOOKNAME = Application.Caller.Parent.Parent.Name End Function |
Следующая функция REVERSETEXT возвращает текст в ячейке в обратном порядке:
1 2 3 4 | Function REVERSETEXT(text) As String ' Возвращает ее аргумент в обратном порядке REVERSETEXT = StrReverse(text) End Function |
Функция EXTRACTELEMENT извлекает элемент из текстовой строки на основе указанного символа-разделителя. Предположим, что ячейка А1 содержит следующий текст: 123-456-789-9133-8844.
Следующая формула возвращает строку 9133, которая является четвертым элементом в исходной строке. В ней используется дефис (-) в качестве разделителя:
=EXTRACTELEMENT(A1;4;"-").
Функция EXTRACTELEMENT принимает три аргумента:
Вот код VBA для функции EXTRACTELEMENT:
1 2 3 4 5 6 7 | Function EXTRACTELEMENT(Txt, n, Seperator) As String ' Возвращает n-й элемент текстовой строки ' где элементы разделены определенным символом-разделителем Dim AllElements As Variant AllElements = Split(Txt, Seperator) EXTRACTELEMENT = AllElements(n - 1) End Function |
Как обеспечить вывод значений выпадающего списка с двоеточием, как в бухгалтерских программах?
Как при помощи инструментов Excel решить задачу о коробке максимального объема
Построение графика функции одной переменной средствами Excel
Как правильно вводить, редактировать и копировать формулы в таблицах Excel
Как в Excel обойтись без подстановки шрифтов при применении малых кеглей