Microsoft Excel

трюкиприёмырешения

VBA и макросы
20.04.2013 7541

Как в Excel при помощи VBA создать простую функцию листа

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 принимает три аргумента:

  • Txt — текстовая строка, из которой вы выполняете извлечение (может быть символьной строкой или ссылкой на ячейку);
  • N — целое число, обозначающее элемент, который нужно извлечь;
  • Separator — один символ, используемый в качестве разделителя.

Вот код 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
Top