Обычно функция Excel VBA Evaluate - удобный способ получить результат формулы рабочего листа в VBA без необходимости помещать формулу в ячейку рабочего листа. Однако я обнаружил, что если вычисляемая формула представляет собой функцию ПОИСКПОЗ, работающую в нескольких столбцах, это на удивление медленнее - НАМНОГО медленнее, чем вычисление той же формулы в ячейке листа. Например:
MatchingRow = EVALUATE(MATCH(Sheet1!G6&Sheet1!H6&Sheet1!I6,Sheet2!B:B&Sheet2!C:C&Sheet2!D:D,0))
Любая идея, почему это будет намного медленнее, чем это, в ячейке рабочего листа?
=MATCH(Sheet1!G6&Sheet1!H6&Sheet1!I6,Sheet2!B:B&Sheet2!C:C&Sheet2!D:D,0)
Я почти уверен, что слышу, как кто-то уже набирает ответ, в котором говорится, что все это из-за накладных расходов на вызов функции рабочего листа из среды VBA. Но в этом случае у меня следующий вопрос: Почему EVALUATE не работает медленно и для других функций?
Application.Evaluate
вызывается дважды (это ошибка) по сравнению сWorksheetfunction.Evaluate
. - person Ioannis   schedule 22.09.2015