Формула на Excel: Бройте видими редове само с критерии -

Обща формула

=SUMPRODUCT((range=criteria)*(SUBTOTAL(103,OFFSET(range,rows,0,1))))

Обобщение

За да преброите видими редове само с критерии, можете да използвате доста сложна формула, базирана на SUMPRODUCT, SUBTOTAL и OFFSET. В показания пример формулата в C12 е:

=SUMPRODUCT((C5:C8=C10)*(SUBTOTAL(103,OFFSET(C5,ROW(C5:C8)-MIN(ROW(C5:C8)),0))))

Предговор

Функцията SUBTOTAL може лесно да генерира суми и отчитания за скрити и нескрити редове. Той обаче не може да се справи с критерии като COUNTIF или SUMIF без някаква помощ. Едно от решенията е да използвате SUMPRODUCT, за да приложите както функцията SUBTOTAL (чрез OFFSET), така и критериите. Подробностите за този подход са описани по-долу.

Обяснение

В основата си тази формула работи чрез настройване на два масива в SUMPRODUCT. Първият масив прилага критерии, а вторият масив обработва видимостта:

=SUMPRODUCT(criteria*visibility)

Критериите се прилагат с част от формулата:

=(C5:C8=C10)

Което генерира масив като този:

(FALSE;TRUE;FALSE;TRUE)

Когато TRUE означава „отговаря на критериите“. Забележете, тъй като използваме умножение (*) за този масив, стойностите TRUE FALSE автоматично ще бъдат преобразувани в 1 и 0 от математическата операция, така че в крайна сметка получаваме:

(0;1;0;1)

Филтърът за видимост се прилага с помощта на SUBTOTAL, с номер на функция 103.

SUBTOTAL е в състояние да изключи скрити редове при изпълнение на изчисления, така че можем да го използваме в този случай, за да генерираме "филтър", за да изключим скритите редове вътре в SUMPRODUCT. Проблемът обаче е, че SUBTOTAL връща едно число, докато ние се нуждаем от масив от резултати, за да го използваме успешно в SUMPRODUCT. Номерът е да използвате OFFSET, за да подадете SUBTOTAL по една препратка на ред, така че OFFSET да върне по един резултат на ред.

Разбира се, това изисква друг трик, който е да се даде на OFFSET масив, който съдържа по едно число на ред, започвайки с нула. Правим това с израз, изграден върху функцията ROW:

=ROW(C5:C8)-MIN(ROW(C5:C8)

който ще генерира масив като този:

(0;1;2;3)

В обобщение, вторият масив (който обработва видимостта с помощта на SUBTOTAL) се генерира по следния начин:

=SUBTOTAL(103,OFFSET(C5,ROW(C5:C8)-MIN(ROW(C5:C8)),0)) =SUBTOTAL(103,OFFSET(C5,(0;1;2;3),0)) =SUBTOTAL(103,("East";"West";"Midwest";"West")) =(1;0;1;1)

И накрая имаме:

=SUMPRODUCT((0,1,0,1)*(1;0;1;1))

Което връща 1.

Множество критерии

Можете да разширите формулата, за да обработва множество критерии като този:

=SUMPRODUCT((rng1=criteria1)*(rng2=criteria2)*(SUBTOTAL(103,OFFSET(rng,rows,0,1))))

Сумиране на резултатите

За да върнете сума от стойности вместо броене, можете да адаптирате формулата, така че да включва диапазон от суми:

=SUMPRODUCT(criteria*visibility*sumrange)

Критериите и масивите за видимост работят по същия начин, както е обяснено по-горе, с изключение на клетки, които не се виждат. Ако се нуждаете от частично съвпадение, можете да конструирате израз, като използвате ISNUMBER + SEARCH, както е обяснено тук.

Добри връзки

Дискусия на MrExcel, с Майк Гирвин и Аладин Акюрек Магическият трик 1010 на Майк Гирвин

Интересни статии...