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

Содержание

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

(=SUM(--(FREQUENCY(IF(criteria,values),values)>0)))

Резюме

Чтобы подсчитать уникальные числовые значения в диапазоне, вы можете использовать формулу, основанную на функциях ЧАСТОТА, СУММ и ЕСЛИ. В показанном примере номера сотрудников находятся в диапазоне B5: B14. Формула в G6:

=SUM(--(FREQUENCY(IF(C5:C14="A",B5:B14),B5:B14)>0))

который возвращает 2, поскольку в здании A есть 2 уникальных идентификатора сотрудников.

Примечание: это формула массива, и ее нужно вводить с помощью Ctrl + Shift + Enter, если вы не используете Excel 365.

Объяснение

Примечание. До Excel 365 в Excel не было специальной функции для подсчета уникальных значений. Эта формула показывает один способ подсчета уникальных значений, если они являются числовыми. Если у вас есть текстовые значения или сочетание текста и чисел, вам понадобится более сложная формула.

Функция ЧАСТОТА в Excel возвращает частотное распределение, которое представляет собой сводную таблицу, содержащую частоту числовых значений, организованных в «ячейки». Мы используем его здесь как обходной способ подсчета уникальных числовых значений. Чтобы применить критерии, мы используем функцию ЕСЛИ.

Работая изнутри, мы сначала фильтруем значения с помощью функции ЕСЛИ:

IF(C5:C14="A",B5:B14) // filter on building A

Результатом этой операции является такой массив:

(905;905;905;905;773;773;FALSE;FALSE;FALSE;FALSE)

Обратите внимание, что все идентификаторы в здании B теперь FALSE. Этот массив доставляется непосредственно в функцию FREQUENCY как data_array . Для bins_array мы предоставляем сами идентификаторы:

FREQUENCY((905;905;905;905;773;773;FALSE;FALSE;FALSE;FALSE),(905;905;905;905;773;773;801;963;963;963))

В этой конфигурации FREQUENCY возвращает следующий массив:

(4;0;0;0;2;0;0;0;0;0;0)

Результат немного загадочный, но значение 905 появляется четыре раза, а 773 появляется два раза. Значения FALSE автоматически игнорируются.

FREQUENCY имеет специальную функцию, которая автоматически возвращает ноль для любых чисел, которые уже появились в массиве данных, поэтому значения равны нулю после того, как число обнаружено. Это функция, которая позволяет этому подходу работать.

Затем проверяется, что каждое из этих значений больше нуля:

(4;0;0;0;2;0;0;0;0;0;0)>0

Результатом является такой массив:

(TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE)

Каждое ИСТИНА в списке представляет собой уникальный номер в списке, и нам просто нужно сложить ИСТИННЫЕ значения с помощью СУММ. Однако SUM не будет складывать логические значения в массив, поэтому нам нужно сначала привести значения к 1 или нулю. Это делается с двойным отрицательным знаком (-). Результат - массив только из единиц или нулей:

(1;0;0;0;1;0;0;0;0;0;0)

Наконец, СУММ складывает эти значения и возвращает итог, который в данном случае равен 2.

Несколько критериев

Вы можете расширить формулу для обработки нескольких критериев, например:

(=SUM(--(FREQUENCY(IF((criteria1)*(criteria2),values),values)>0)))

Хорошие ссылки

Книга Майка Гирвина Control-Shift-Enter

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