Я использую эту формулу для извлечения данных из другой рабочей книги. Это повторяется сотни раз, чтобы подсчитать, сколько раз конкретный домен (есть сотни доменов) использовался на другом листе.
=SUMPRODUCT(COUNTIF(INDIRECT({"'E:\[OtherSheet.xlsx]Sheet1'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet2'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet3'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet4'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet5'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet6'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet7'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet8'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet9'!A1:ZZ500"}),D2))
Это подсчитывает, сколько раз "D2" появляется в другая рабочая тетрадь (на девяти разных листах). Этот код копируется для «D3», «D4» и т. Д. Сотни раз.
Существует ряд проблем.
1) Другая рабочая книга должна быть открыта, иначе данные не будут обновляться (даже при точном пути, INDIRECT не будет разрешать обновления).
2) Если оба листа открыты, они обновляются каждый раз, когда вы что-либо делаете, даже копируя и вставляя ячейки или вставляя новые ячейки. «Ручные» обновления формул не могут использоваться, поскольку есть другие динамические c переменные, кроме этой (которые не замедляют работу Excel), которые необходимо часто пересчитывать.
3) Из того, что я поймите, INDIRECT и другие связанные функции являются однопоточными, что, даже с процессором i7-8700k и 32 ГБ ОЗУ, с 64-разрядным Excel делает пересчет безумно медленным.
4) Я попытался понизить " сканируемая область "резко, но это не ускоряет его. ZZ10000 и ZZ500 не имеют значения, они оба одинаково медленны.
Обходной путь - оставить один лист открытым, обновить его, а затем открыть оба, когда мне нужен общий вид. Если один лист закрыт, Excel работает нормально, так как ему не нужно постоянно пересчитывать. Желательно, чтобы оба листа оставались открытыми без такого драматического замедления c.
Из десятков часов исследований я как бы пришел к выводу, что это невозможно сделать быстрый способ без использования VBA. Но я не могу найти ни одной функции VBA для репликации кода выше.
Я также открыт для решений, не основанных на VBA.