Вот на чем я остановился. Это определенно не удовлетворило бы потребности каждого.
Ситуация:
– я не хочу запускать SUMIF 20 раз для 10 000 строк
– я могу с уверенностью предположить, что для каждой категории никогда не будет более 200 строк (т. е. группы строки, которые соответствуют моему критерию суммирования).
. Мне также полезно иметь таблицу, содержащую только строки, соответствующие этим критериям.
Решение.
Я создаю таблицу с 200 строками формул, в которой будут отображаться строки, соответствующие моим критериям.
Крайний левый столбец будет иметь номер следующей совпадающей строки или будет пустым и не будет выполнять поиск, если их больше нет.
Первая строка левого столбца:
IFERROR(MATCH(CategoryID,'DataTable'!B:B,0),"")
Последующие строки левого столбца (A2 — ячейка выше):
IF(A2="","",MATCH(CategoryID,OFFSET('DataTable'!B:B,A2,0,RowsInTable-A2,1),0)+A2))
Все ячейки справа от этого являются основными формулами ИНДЕКС, которые используют номер строки из самого левого столбца.
Для подсчета количества найденных результатов используем:
=COUNTA(A2:A202)-COUNTBLANK(A2:A202)
Затем мы используем этот счетчик и таблицу для выполнения хороших быстрых сумм:
SUM(OFFSET(C:C,0,0,RowCount,1))
person
WoodenKitty
schedule
15.04.2013
=SUMIF(...)
. Если по какой-либо причине вы не хотите, чтобы эта формула существовала, вы можете применять ее каждый раз, когда вам нужны новые результаты с кодом vba, используяWorksheetFunction.SumIf(...)
- person Kazimierz Jawor   schedule 12.04.2013