Страницы: 1
RSS
Как программно проверить наличие Диапазона или Имени по текстовому значению, Check Range or Name in a Book by its Text
 
Приветствую!
Похожее было, например, тут. Оттуда же и функция ZVI (слегка изменённая)

Смотреть концевик темы — есть важные обновления!

Итак, метод определения наличия имени, предложенный ZVI прекрасен в своей простоте и скорости.
У него конкурентов нет  :idea:

    Популярный метод определения, является (может ли стать) текстовая переменная диапазоном (с помощью Evaluate), медленнее аналога на Range от 2ух до 9ти раз.
    Обращаю внимание, что Имя (именованный диапазон) ПРОХОДИТ проверку на Диапазон, но Диапазон НЕ ПРОХОДИТ проверку на Имя.

Файл и Код

Выводы:
    • Evaluate в разы медленнее Range (даже с перещёлкиванием обхода ошибок туда-сюда в цикле), так что подменять им Range в цикле — плохая идея
    • проверка "корректного" текста диапазона около 10 раз быстрее проверки НЕкорректного
    • проверки "корректного" имени и "некорректного" примерно равны по скорости между собой и с [быстрой] проверкой "корректного" диапазона.
Это означает, что для проверки ИМЕНИ не нужно предварительно проверять текст на ДИАПАЗОН — будет в разы (до 10ти раз) дольше.

UPD 22/11/2022:
Конструкция TypeOf Expression Is Value является самым производительным вариантом. Работает для определения:
    • листа:        f = TypeOf Workbooks().Sheets(txShName) Is Worksheet
    • диапазона: f = TypeOf Workbooks().Sheets().Range(txAddress) Is Range
    • имени:       f = TypeOf Workbooks().Names(txName) Is Name
Коды функций
Тесты не правил.
Изменено: Jack Famous - 22.11.2022 14:01:31
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх