Фильтровать диапазон ячеек перед переходом к функции - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть пользовательская функция VBA, в которую я передаю диапазон ячеек большого размера (~ 600 ячеек в одном столбце).

Вот формула:

=getRootWord($I620, OFFSET($H$8,0,0,(ROW()-ROW($H$8)),1))

( По сути, он говорит: «Для данной ячейки, вызывающей эту формулу, передайте диапазон, охватывающий каждую ячейку над ней, начиная со строки 8» - есть ли лучший способ написать эту формулу? )

Моя проблема в том, что пользовательская функция VBA работает немного медленно, и действительно, 90% переданных ячеек мне не нужно, и их нужно игнорировать в функции VBA.

Меня не интересует любая ячейка над этой ячейкой, в которой есть формула, а не текст.

Как использовать формулы Excel для работы с этим диапазоном (OFFSET($H$8,0,0,(ROW()-ROW($H$8)),1)) и исключить какие-либо ячейки в этом диапазоне, которые имеют формулу? Или альтернативно исключить все ячейки, которые не являются текстовыми?

Каждая ячейка в этом столбце является либо формулой (показана та же формула) или текст - без пробелов, цифр, дат и т. д. *

1 Ответ

0 голосов
/ 19 февраля 2019

Application.ThisCell или Application.Caller будут ссылаться на ячейку, в которой находится UDF. Вы можете получить текущую строку из одного из них.

Range.SpecialCells(xlCellTypeConstants) будет учитывать только значения;не формулы или пробелы.Range.SpecialCells(xlCellTypeConstants, xlTextValues) дополнительно сжимает это к значениям, которые являются текстовыми.Если есть несвязанные «области» текстовых значений, вам, возможно, придется работать через Области объединения диапазонов.

Чтобы получить диапазон ячеек в столбце I, начиная со строки 8 до строки с формулой try,

dim rng as range

with application.caller.parent
    set rng = intersect(.range(.cells(8, "I"), .cells(application.caller.row-1, "I"))).SpecialCells(xlCellTypeConstants, xlTextValues)
end with

debug.print rng.address(0,0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...