Формула Excel: Подсчет видимых строк только с критериями -

Общая формула

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

Резюме

Чтобы подсчитать видимые строки только с критериями, вы можете использовать довольно сложную формулу, основанную на СУММПРОИЗВ, ПРОМЕЖУТОЧНЫЙ ИТОГ и СМЕЩЕНИЕ. В показанном примере формула в C12:

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

Предисловие

Функция ПРОМЕЖУТОЧНЫЙ ИТОГ может легко генерировать суммы и подсчеты для скрытых и не скрытых строк. Однако он не может обрабатывать такие критерии, как СЧЁТЕСЛИ или СУММЕСЛИ, без какой-либо помощи. Одно из решений - использовать СУММПРОИЗВ для применения функции ПРОМЕЖУТОЧНЫЙ ИТОГ (через СМЕЩЕНИЕ) и критериев. Подробности этого подхода описаны ниже.

Объяснение

По сути, эта формула работает путем создания двух массивов внутри SUMPRODUCT. Первый массив применяет критерии, а второй массив обрабатывает видимость:

=SUMPRODUCT(criteria*visibility)

Критерий применяется с частью формулы:

=(C5:C8=C10)

Что генерирует такой массив:

(FALSE;TRUE;FALSE;TRUE)

Где ИСТИНА означает «соответствует критериям». Обратите внимание, поскольку мы используем умножение (*) в этом массиве, значения TRUE FALSE будут автоматически преобразованы в 1 и 0 с помощью математической операции, поэтому мы получим:

(0;1;0;1)

Фильтр видимости применяется с помощью SUBTOTAL с номером функции 103.

SUBTOTAL может исключать скрытые строки при выполнении вычислений, поэтому мы можем использовать его в этом случае для создания «фильтра» для исключения скрытых строк внутри SUMPRODUCT. Проблема в том, что SUBTOTAL возвращает одно число, а нам нужен массив результатов, чтобы успешно использовать его внутри SUMPRODUCT. Уловка состоит в том, чтобы использовать OFFSET для подачи SUBTOTAL по одной ссылке на строку, так что OFFSET будет возвращать один результат для каждой строки.

Конечно, для этого нужен другой трюк, который состоит в том, чтобы дать OFFSET массив, содержащий одно число в строке, начиная с нуля. Мы делаем это с помощью выражения, построенного на функции СТРОКА:

=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

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