Как упомянуто в комментарии, любая формула, введенная как формула массива или любая формула, использующая функцию, включающую циклические вычисления (например, SUMPRODUCT, некоторые варианты AGGREGATE и т. Д.), Не должна использовать полные ссылки на столбцы.Циклический расчет с 10 строками составляет 100 вычислений;1000 строк составляет 1 миллион вычислений.Если вы выполните математику для 1048 576 строк, а затем вычислите ненужные вычисления, выполненные для пустых ячеек, вы быстро увидите потраченные впустую вычислительные циклы, которые переводятся в «задержку вычисления».
Таким образом, вместо использования B:B
, вы можетеначать с B1
в качестве верхней ячейки в столбце B: B.Строка с последним номером в столбце B: B может быть получена с помощью
MATCH(1E99, B:B)
. Таким образом, вы можете найти последнюю ячейку в столбце B: B с номером, указав в столбце B: B INDEXing и используя MATCH длянайдите номер строки.
INDEX(B:B, MATCH(1E99, B:B))
Чтобы получить диапазон, просто объедините их двоеточием.
B1:INDEX(B:B, MATCH(1E99, B:B))
'if you are starting your data at a significantly different row than row 1 then this would be better where you can easily set the starting row
INDEX(B:B, 1):INDEX(B:B, MATCH(1E99, B:B))
Я предпочитаю подфункцию SMGR в AGGREGATE, а в массив вводится SMALL (IF ..поэтому моя версия вашей формулы будет выглядеть следующим образом:
=INDEX(B:B, AGGREGATE(15, 6, ROW(INDEX(B:B, 1):INDEX(B:B, MATCH(1E+99, B:B)))/SIGN(LEN(INDEX(B:B, 1):INDEX(B:B, MATCH(1E+99, B:B)))), ROW(1:1)))
Это может показаться более сложным, но это уменьшит задержку расчета до минимума.