Столкнулся с проблемой.
Для мощного поиска использую регулярные выражения. Вызываю их функции через VBA, написав свою "обёртку".
Все работает.
Но я очень много и гибко использую формулы массива при написании формул. И они оказываются не совместимы с пользовательской функцией на VBA.
Когда я вставляю в формулу массива свою функцию (вызова поиска через библиотеку регулярных выражений) - формула массива работает не корректно.
Поясню:
Допустим стандартная функция Excel принимает один аргумент - одну ячейку. Когда в формуле массива я указываю для этой функции диапазон ячеек, то данная функция вызывается для каждой ячейки.
Когда в формуле массива я указываю свою функцию, написанную на VBA, то либо получается ошибка с несовместимостью входящего параметра (ожидалась одна ячейка, а передается диапазон), либо если я правлю свою функцию так, чтобы она принимала диапазон - то моя функция вызывается 1 раз со всем диапазоном.
Никаким ухищрениями мне не удалось заставить формулу массива вызывать мою функцию для каждой ячейки диапазона, передавая в качестве параметра значение одной очередной ячейки.
Очень упрощенный пример.
Ячейки A1:С3
-1 =СУММ(ABS(A1:A2)) 3
-2 =СУММ(MyAbs1(A1:A2)) #ЗНАЧ!
=СУММ(MyAbs2(A1:A2)) 1
В столбце B все формулы массива (в фигурных скобках).
В столбце C вставлены результаты выполнения формул из столбца 2.
Содержимое Module1 в VBA:
Код |
---|
Function MyAbs1(i As Integer) MyAbs1 = Abs(i) End Function Function MyAbs2(i As Range) MyAbs2 = Abs(i.Cells(1).Value) End Function |
Что мы видим:
В ячейке B2 функция MyAbs1 вообще вызываться не хочет.
А в ячейке B3 функция MyAbs2 вызывается один раз с диапазоном A1:А2 (и выдает неправильный рельтат "1" вместо "3"), вместо двухкратного вызова (сначала с A1, затем с A2 и их суммированием).
В ячейке B1 со стандартной (не пользовательской) функцией - все работает корректно.
Как написать формулу массива с моей пользовательской функцией чтобы она вызывалась корректно и выдавала правильный результат?
Кто то может чем то помочь или подсказать?
Заранее благодарен.