Формула Excel: подсчет строк с помощью логики ИЛИ -

Содержание

Резюме

Для подсчета строк с помощью логики ИЛИ можно использовать формулу, основанную на функции СУММПРОИЗВ. В показанном примере формула в G6:

=SUMPRODUCT((group="a")*((color1="red")+(color2="red")>0))

где группа (B5: B15), цвет1 (C5: C15) и цвет2 (D5: D15) являются именованными диапазонами.

Объяснение

Одна из более сложных проблем в Excel - подсчет строк в наборе данных с помощью логики «ИЛИ». Существует два основных сценария: (1) вы хотите подсчитать строки, в которых значение в столбце - «x» ИЛИ «y» (2) вы хотите подсчитать строки, в которых значение «x» существует в одном столбце ИЛИ в другом. .

В этом примере цель состоит в том, чтобы подсчитать строки, в которых group = "a" И Color1 OR Color2 являются "красными". Это означает, что мы работаем со сценарием 2 выше.

С СЧЁТЕСЛИМН

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

=COUNTIFS(group,"a",color1,"red",color2,"red") // returns 1

Это делает COUNTIFS неработоспособным, если мы не используем несколько экземпляров COUNTIFS:

=COUNTIFS(group,"a",color1,"red")+COUNTIFS(group,"a",color2,"red")-COUNTIFS(group,"a",color1,"red",color2,"red")

Перевод: подсчет строк, где группа - «а», а цвет1 - «красный» + подсчет строк, где группа - «а», а цвет2 - «красный» - подсчитать строки, где группа - это «а», а цвет1 - «красный», а цвет2 - « красный »(во избежание двойного счета).

Это работает, но вы можете видеть, что это несколько сложная и избыточная формула.

С булевой логикой

Лучшее решение - использовать логическую логику и обработать результат с помощью функции СУММПРОИЗВ. (Если вам нужен учебник по булевой алгебре, это видео дает введение.) В показанном примере формула в G6:

=SUMPRODUCT((group="a")*((color1="red")+(color2="red")>0))

где группа (B5: B15), цвет1 (C5: C15) и цвет2 (D5: D15) являются именованными диапазонами.

Первая часть проблемы - проверить наличие group = "a", что мы делаем следующим образом:

(group="a")

Поскольку диапазон B5: B15 содержит 11 ячеек, это выражение возвращает массив из 11 значений TRUE и FALSE, например:

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

Каждое ИСТИНА представляет собой строку, в которой группа «А».

Затем нам нужно проверить значение «красный» в столбце 1 или 2. Мы делаем это с помощью двух выражений, соединенных сложением (+), поскольку сложение соответствует логике ИЛИ в булевой алгебре:

(color1="red")+(color2="red")

Excel автоматически оценивает значения ИСТИНА и ЛОЖЬ как единицы и нули во время любой математической операции, поэтому результатом приведенного выше выражения является такой массив:

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

Первое число в массиве - 2, потому что и Color1, и Color2 в первой строке «красные». По причинам, объясненным ниже, нам необходимо защититься от этой ситуации, проверяя значения больше нуля:

((2;0;0;1;1;0;1;0;0;0;1))>0

Теперь у нас снова есть массив значений ИСТИНА и ЛОЖЬ:

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

В таблице ниже показано, как Excel оценивает цветовую логику, описанную выше:

На данный момент у нас есть результаты тестирования Group = "a" в одном массиве:

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

И результаты тестирования «красного» в Color1 или Color2 в другом массиве:

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

Следующим шагом является объединение этих двух массивов с помощью «логики И». Для этого мы используем умножение (*), поскольку умножение соответствует логике И в булевой алгебре.

После умножения двух массивов мы получаем один массив из единиц и нулей, который передается непосредственно в функцию СУММПРОИЗВ:

=SUMPRODUCT((1;0;0;0;1;0;0;0;0;0;0))

Функция СУММПРОИЗВ возвращает сумму чисел, 2, в качестве окончательного результата. Это количество строк, в которых group = "a" И Color1 OR Color2 являются "красными".

Чтобы избежать двойного счета

Мы не хотим дважды подсчитывать строки, в которых и Color1, и Color2 "красные". Вот почему мы проверяем результаты (color1 = "red") + (color2 = "red") на значения больше нуля в приведенном ниже коде:

((color1="red")+(color2="red"))>0

Без этой проверки 2 из первой строки данных появятся в конечном массиве и приведут к тому, что формула будет неправильно возвращать 3 в качестве окончательного подсчета.

Опция ФИЛЬТР

В булевой логике приятно то, что она отлично работает с новейшими функциями Excel, такими как XLOOKUP и FILTER. Например, функция ФИЛЬТР может использовать ту же логику, которая описана выше, для извлечения совпадающих строк:

=FILTER(B5:D15,(group="a")*((color1="red")+(color2="red")>0))

Результатом FILTER являются две строки, соответствующие критериям, как показано ниже:

Если вы хотите узнать больше об этих новых функциях, у нас есть обзор и обучающее видео.

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