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

Содержание

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

(=SUM(--(FREQUENCY(IF(criteria,MATCH(vals,vals,0)),ROW(vals)-ROW(vals.first)+1)>0)))

Резюме

Чтобы подсчитать уникальные текстовые значения в диапазоне с критериями, вы можете использовать формулу массива, основанную на функциях ЧАСТОТА и ПОИСКПОЗ. В показанном примере формула в G6:

(=SUM(--(FREQUENCY(IF(C5:C11=G5,MATCH(B5:B11,B5:B11,0)),ROW(B5:B11)-ROW(B5)+1)>0)))

который возвращает 3, поскольку над проектом Omega работали три разных человека.

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

Объяснение

Это сложная формула, в которой ЧАСТОТА используется для подсчета числовых значений, полученных с помощью функции ПОИСКПОЗ. Работая изнутри, функция ПОИСКПОЗ используется для получения позиции каждого значения, которое появляется в данных:

MATCH(B5:B11,B5:B11,0)

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

(1;1;3;1;1;6;7)

Поскольку ПОИСКПОЗ всегда возвращает позицию первого совпадения, значения, которые встречаются в данных более одного раза, возвращают ту же позицию. Например, поскольку «Джим» появляется в списке 4 раза, он появляется в этом массиве 4 раза как число 1.

Вне функции ПОИСКПОЗ функция ЕСЛИ используется для применения критериев, что в данном случае включает проверку того, является ли проект "омега" (из ячейки G5):

IF(C5:C11=G5 // filter on "omega"

Функция ЕСЛИ действует как фильтр, позволяя проходить значениям из ПОИСКПОЗ, только если они связаны с «омегой». Результатом является такой массив:

(FALSE;FALSE;FALSE;1;1;6;7) // after filtering

Отфильтрованный массив доставляется непосредственно в функцию FREQUENCY как аргумент data_array . Затем функция СТРОКА используется для построения последовательного списка чисел для каждого значения в данных:

ROW(B3:B12)-ROW(B3)+1

Это создает такой массив:

(1;2;3;4;5;6;7;8;9;10)

который становится аргументом bins_array в FILTER. На данный момент у нас есть:

FREQUENCY((FALSE;FALSE;FALSE;1;1;6;7),(1;2;3;4;5;6;7))

FREQUENCY возвращает массив чисел, которые указывают количество для каждого значения в массиве данных, организованных по ячейкам. Когда число уже подсчитано, FREQUENCY вернет ноль. Результатом FREQUENCY является такой массив:

(2;0;0;0;0;1;1;0) // result from FREQUENCY

Примечание. FREQUENCY всегда возвращает массив, в котором на один элемент больше, чем в bins_array .

На этом этапе мы можем переписать формулу следующим образом:

=SUM(--((2;0;0;0;0;1;1;0)>0))

Мы проверяем значения больше нуля, что преобразует числа в ИСТИНА или ЛОЖЬ:

=SUM(--((TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE)))

Затем мы используем двойное отрицание для приведения логических значений к 1 и 0:

=SUM((1;0;0;0;0;1;1;0))

Наконец, функция СУММ возвращает 3 в качестве окончательного результата.

Примечание: это формула массива, и ее необходимо вводить с помощью Control + Shift + Enter.

Обработка пустых ячеек в диапазоне

Если какие-либо ячейки в диапазоне пусты, вам необходимо настроить формулу, чтобы предотвратить передачу пустых ячеек в функцию ПОИСКПОЗ, что приведет к ошибке. Вы можете сделать это, добавив еще одну вложенную функцию ЕСЛИ для проверки пустых ячеек:

(=SUM(--(FREQUENCY(IF(B5:B11"",IF(C5:C11=G5,MATCH(B5:B11,B5:B11,0))),ROW(B5:B11)-ROW(B5)+1)>0)))

С двумя критериями

Если у вас есть два критерия, вы можете расширить логику формулы, добавив еще один вложенный IF:

(=SUM(--(FREQUENCY(IF(c1,IF(c2,MATCH(vals,vals,0))),ROW(vals)-ROW(vals.1st)+1)>0)))

Где c1 = критерий1, c2 = критерий2 и vals = диапазон значений.

С логической логикой

С помощью логической логики вы можете уменьшить количество вложенных IF:

(=SUM(--(FREQUENCY(IF((criteria1)*(criteria2),MATCH(vals,vals,0)),ROW(vals)-ROW(vals.1st)+1)>0)))

Это упрощает добавление дополнительных критериев и управление ими.

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

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

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