Подсчет нескольких критериев

448
Pjossemannen

это мой первый пост на этом форуме, поэтому, вероятно, он представлен очень плохо. Я использую Excel 2007, чтобы собрать некоторые данные для моей диссертации. Недавно я узнал, как вкладывать COUNTIFS в SUMPRODUCT для поиска нескольких критериев, где одним из этих критериев является диапазон, а не константа. Однако та же формула не работает, если мне нужно искать несколько критериев, где два (или более) критерия являются диапазонами, а не константами.

Скажем, у меня есть три смежных столбца AC в Excel, где A называется «Фрукты» и содержит различные фрукты, B - «цвет», а C - «ядовитый?», Содержащий только значения «да» или «нет». Как мне сложить все элементы, которые являются ЛИБО яблоком ИЛИ грушей из столбца А и ЛИБО зеленым ИЛИ красным из столбца В и не ядовитые из столбца С?

В этом простом листе Excel правильный ответ - 4, но следующая формула дает мне 1:

=SUMPRODUCT(COUNTIFS(A:A,$E$2:$E$3,B:B,$F$2:$F$3,C:C,$G$3)) 

enter image description here

где критерий относится к массивам, которые я выставил вручную снаружи.

Я искал ответы как в сети, так и на форуме, и нахожу десятки связанных постов, некоторые, возможно, даже идентичные ( показатели с несколькими диапазонами критериев ИЛИ ), но мне все еще не удается это выяснить ... Опаздываете вовремя с моей диссертацией, поэтому я был бы признателен за любую помощь.

1
Если ваше требование состоит в том, чтобы считать фрукты по цвету и количеству, сколько ядовитых и общее количество ядовитых фруктов в табличном формате, ответ готов со мной, пожалуйста, подтвердите! Rajesh S 5 лет назад 0
@RajeshS, я не совсем понимаю; Я хотел бы посчитать количество яблок и груш (не бананов), которые бывают зелеными или красными, но не ядовитыми. Поскольку все яблоки и груши в моей таблице зеленые или красные, правильный ответ должен быть 4, поскольку есть 2 неядовитых яблока и 2 неядовитых груши. Однако, используя формулу, приведенную в моем посте, я получаю ответ 1, что неверно. Знаете ли вы, как предоставить правильную формулу? В более общем плане, как я могу использовать два критерия в одной и той же формуле? Pjossemannen 5 лет назад 0
(1) Пожалуйста, не называйте [SE] (частью которого является [SU]) «форум». Это сайт вопросов и ответов. (2) Вы говорите: «Я недавно узнал, как вкладывать COUNTIFS в SUMPRODUCT для поиска нескольких критериев, где один из этих критериев является диапазоном, а не константой». Было бы неплохо, если бы вы показали рабочий пример этого. Наверное, я понял / вспомнил, о чем ты говоришь, но я не сразу узнал это по твоему описанию. Если вы показали пример (и / или связались с объяснением с примерами),… (Продолжение) Scott 5 лет назад 0
(Продолжение)… (2a) люди могли бы узнать что-то * из вашего вопроса *, и (2b) люди могли бы выработать ответ на ваш вопрос, опираясь на то, что вы уже знаете, скорее чем начинать с нуля и / или пытаться восстановить то, что вы уже знаете (заново изобрести колесо). (3) Возможно, вы захотите разработать менее единообразные данные. (3а) Все твои яблоки и груши красного или зеленого цвета. И наоборот, все ваши красные или зеленые фрукты - яблоки или груши. Поэтому вы получаете такие вещи, как [ответ Раджеша С.] (https://superuser.com/q/1326319/150988#1326367),… (продолжение) Scott 5 лет назад 0
(Продолжение) ... который фактически считает неядовитые яблоки и груши (без учета цвета), и он получает правильный ответ, потому что данные недостаточно надежны. (3b) Глядя на свой неядоватый фрукт, у вас есть ровно одно красное яблоко, одно зеленое яблоко, одна красная груша и одна зеленая груша - и никаких других цветов или фруктов. Такая однородность позволяет неправильной формуле получить правильный ответ. (4) [Мы предпочитаем, чтобы вы не публиковали скриншоты электронных таблиц (или, в общем, изображений текста).] (// unix.meta.stackexchange.com/q/4086/23408) Публикуйте текстовое представление ваших данных, … (Продолжение) Scott 5 лет назад 0
(Продолжение)… как это было сделано [здесь] (// superuser.com/q/889201/150988) и [здесь] (// superuser.com/q/892744/150988); при желании используйте сайт [Формат текста в виде таблицы] (https://senseful.github.io/text-table) или [Генератор таблиц в виде простого текста] (http://www.tablesgenerator.com/text_tables). (5) Вы уверены, что показываете нам то, что говорите? Когда я проверяю вашу формулу на ваших данных (в Excel 2013), я получаю результат 2. Если вам необходимо опубликовать снимок экрана с электронной таблицей, оставьте панель формул на рисунке, чтобы мы могли точно знать, какая у вас формула в вашем листе. Scott 5 лет назад 0
Хорошо, я постараюсь объяснить лучше. Что касается вложенности в sumproduct: В таблице на скриншоте выше, если я хочу узнать, сколько яблок красного или зеленого цвета, но не ядовитых, я мог бы использовать: = SUMPRODUCT (COUNTIFS (A: A, E2, B: B, F2: F3, C: C, G3)) Это дало бы правильно, дайте мне 2. Однако, если я хочу выяснить, сколько груш ИЛИ яблоки либо зеленые, либо красные И не ядовиты, я не могу использовать: = SUMPRODUCT ( COUNTIFS (A: A, E2: E3, B: B, F2: F3, C: C, G3)), поскольку это также дает мне 2 (не 1, извините), а не правильный 4. Мне нужна одна формула это дает мне правильный ответ 4, а кроме того Pjossemannen 5 лет назад 0
Продолжение: и, кроме того, эта формула должна позволить мне перетаскивать критерии в формулу, ссылаясь на ячейки (например, E2: E3 или F2: F3), а не называть критерии внутри кавычек, поскольку поиск, который я хочу выполнить, будет варьироваться более 25 различных значений в одном из критериев и 16 в других критериях. Будет третий критерий, который является константой, как в приведенной выше формуле, которая относится к неядовитым ... Возможно, я должен сделать новый пост и попытаться представить мои фактические данные ... Или, возможно, предложение Пико с белым списком и черный список может сработать, я попробую ... Pjossemannen 5 лет назад 0
Тем не менее, @piko предложил мне воздержаться от выполнения поиска в белых списках по столбцам, но это именно то, что мне нужно сделать. Все диапазоны, которые мне нужны для поиска, представляют собой целые столбцы, растягивающиеся на 2000 строк вниз. Мне нужно искать три таких столбца одновременно в одной формуле, и два из трех критериев, как уже было сказано, охватывают несколько значений с помощью логики ИЛИ ... Надеюсь, это правильно описано. Pjossemannen 5 лет назад 0
@Pjossemannen, прости, я не знал, что было так много строк. Я имел в виду следующее: обычно не рекомендуется использовать в вычислениях целый столбец (например, `B: B`). Столбец содержит тысячи строк (1 миллион в Excel 2016), поэтому даже если ваши данные занимают 100 тыс. Строк (что очень много), вам не нужны оставшиеся 90%. piko 5 лет назад 0
@Pjossemannen, также, пожалуйста, проверьте мой [второй ответ] (https://superuser.com/a/1326808/888507) и скажите нам, работает ли он для вас! Я считаю, что это то, что вам нужно :-) piko 5 лет назад 0
Спасибо @piko, я проверю это. И это очень хороший совет, который вы дадите, чтобы не ссылаться на целые столбцы. Я мог бы легко изменить свои формулы с A: A на A1: A3000 и т. Д., Что сработает так же хорошо. Pjossemannen 5 лет назад 0

4 ответа на вопрос

1
piko

Вам не нужно ничего вкладывать. Функция SUMPRODUCTочень мощная, которая позволяет вам считать или суммировать на основе очень сложных условий. Он поддерживает как логические операторы AND, так и OR.

TL; версия DR

=SUMPRODUCT((($A$2:$A$10="Apple")+($A$2:$A$10="Pear"))*(($B$2:$B$10="Red")+($B$2:$B$10="Green"))*($C$2:$C$10<>"Yes")) 

Длинная версия (извините ...)

Вы должны действительно научиться использовать эту функцию, потому что она очень полезна и может сэкономить вам много времени. Вот краткое и грязное руководство о том, как его использовать, но я советую вам сохранить какой-нибудь тестовый файл с простыми примерами, такими как тот, который вы предоставили, чтобы вы могли поэкспериментировать с ним. Не стесняйтесь разделять различные проблемы, которые вы пытаетесь решить.

В основном, a SUMPRODUCTсодержит несколько членов, каждый из которых является условием. Если вы умножите эти условия, вы получите логическое И. Если вы добавите эти условия, вы получите логическое ИЛИ.

С примером гораздо проще! Итак, вот разбивка окончательной формулы на примере ваших фруктов.

Примечание: чтобы упростить задачу, я использовал имена таблиц Fruits, что позволяет использовать именованные диапазоны и улучшает удобочитаемость.

enter image description here

Так вот как это работает. Ваше первое условие - это на самом деле логическое ИЛИ (вам нужны яблоки или груши, поскольку фрукт не может быть и тем и другим. Таким образом, формула (1) имеет 2 члена или 2 условия: Fruit = Apple, Fruit = Pear.

(Fruits[Fruit]="Apple")вернется, TRUEесли это яблоко, в FALSEпротивном случае. Суммируя это для 2nd member ( (Fruits[Fruit]="Pear")), вы получите массив 0 и 1. Логика следующая:

  • Ложь + Ложь = 0
  • True + False = 1
  • True + True = 1

Затем SUMPRODUCTсумма будет суммировать все элементы этого массива (0 и 1). Что в основном так же, как подсчет элементов. Результат 8, как и ожидалось (ячейка D14).

Второе условие (цвет) работает точно так же. Если вы хотите включить третий цвет (например, «оранжевый»), вы просто добавите новый элемент в уравнение с помощью +.

Третье условие более простое, у вас есть только 1 критерий. Я специально использовал этот <>знак, чтобы показать вам, что вы также можете исключать элементы. В формуле (1) вы могли бы использовать, например (Fruits[Fruit]<>"Banana").

Важное замечание : Обратите внимание, что в SUMPRODUCT, когда есть только один член (как в 3-м уравнении), вам необходимо преобразовать результат в число. Помните: SUMPRODUCTсоздает массив TRUEи FALSE. Вы можете сделать это легко, используя N(...)функцию или записав альтернативу --(...), которая преобразуется TRUEв 1 и FALSEв 0.

Теперь эти 3 условия работают индивидуально, но мы хотим объединить их в 1 формулу. И поскольку мы хотим, чтобы каждое из этих трех условий было истинным (фруктовое, цветное и ядовитое), нам необходимо создать логическое И. Это можно сделать так же, как мы делали ИЛИ, но на этот раз мы будем использовать умножение ( *):

  • Ложь * Ложь = 0
  • True * False = 0
  • True * True = 1

Для наших 3 условий мы просто используем 3 отдельные формулы, которые мы написали ранее, и помещаем их в a SUMPRODUCT. Эти 3 члена должны быть заключены в круглые скобки и разделены *(мы в основном умножаем их).

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

=SUMPRODUCT((Fruits[Fruit]="Apple")+(Fruits[Fruit]="Pear")) =SUMPRODUCT((Fruits[Color]="Red")+(Fruits[Color]="Green")) =SUMPRODUCT(N(Fruits[Poisonous]<>"Yes")) 

И последний:

=SUMPRODUCT(((Fruits[Fruit]="Apple")+(Fruits[Fruit]="Pear"))*((Fruits[Color]="Red")+(Fruits[Color]="Green"))*(Fruits[Poisonous]<>"Yes")) 

Примечания стороны:

  • Каждое проверяемое условие (например, Color = Red) должно быть заключено в круглые скобки: (Fruits[Color]="Red")
  • Порядок скобок очень важен, если у вас есть условия ИЛИ. Например, уравнение (X and (Y or Z))не совпадает с ((X and Y) or Z).
  • Вы можете использовать классические операторы для проверки условия: = для равных, <> для разных,> и <для большего / меньшего, чем>> и <= для большего / меньшего или равного.
  • Мы использовали SUMPRODUCTдля подсчета, но мы также можем использовать его для суммирования. Если один из членов уравнения не имеет =знака, то значения учитываются (см. Пример ниже, где столбец G суммируется).
  • Критерии "Apple"могут быть заменены ссылкой на ячейку, которая сама по себе может быть выпадающим меню. Лучше использовать переменные, а не писать текст непосредственно внутри формулы.
  • SUMPRODUCTможет быть ресурсоемкой формулой, поскольку она производит умножения и суммы ... В зависимости от того, сколько условий вы тестируете, насколько велик набор данных и сколько раз вы используете a SUMPRODUCT. Для более простых условий, SUM.IFSвероятно, быстрее.
  • SUMPRODUCT также поддерживает частичный текстовый поиск, как показано ниже:

enter image description here

Спасибо за этот очень информативный ответ, я буду экспериментировать с этим. Это последняя формула, которая меня интересует, поскольку она объединяет все в одну формулу. Однако обе ранжированные переменные у меня содержат очень много элементов. Это было бы как 24 фруктов и 16 цветов в окончательной формуле. Вместо того, чтобы заключать каждое условие в "", можно ссылаться на диапазон ячеек, в которых перечислены критерии, так что я могу просто "перетащить" их в формулу, например: ... ((Fruits [Fruit] = F1: F24)) * ((Фрукты [Цвет] = G1: G16)) ... и т. Д. Я не получаю это, чтобы работать для более чем 1 дальнего условия. Pjossemannen 5 лет назад 0
Действительно, это может быть не лучшим решением, если у вас много критериев ... Я нашел другое решение, которое работает очень хорошо, я опубликую его как новый ответ. piko 5 лет назад 0
1
piko

Вот альтернативное решение, которое работает очень хорошо и гораздо больше подходит для того, чтобы у ОП был список возможных критериев. Я адаптировал часть кода, найденную в этом ответе .

У вас есть в основном 2 способа подсчета значений:

  • Либо используя «белый список», чтобы перечислить приемлемые значения, используя ISNUMBER
  • Либо используя «balcklist», чтобы исключить недопустимые значения, используя ISNA

Whitelist:

=SUMPRODUCT( (ISNUMBER(MATCH(Fruits[Fruit],Whitelist[Fruit];0))) * (ISNUMBER(MATCH(Fruits[Color],Whitelist[Color];0))) * (ISNUMBER(MATCH(Fruits[Poisonous],Whitelist[Poisonous];0))) ) 

Черный список:

=SUMPRODUCT( (ISNA(MATCH(Fruits[Fruit],Blacklist[Fruit],0))) * (ISNA(MATCH(Fruits[Color],Blacklist[Color],0))) * (ISNA(MATCH(Fruits[Poisonous],Blacklist[Poisonous],0))) ) 

Я настоятельно советую вам не использовать это в столбце, так как это может быть ресурсоемким. Я не пробовал это на очень большом списке ценностей, но не стесняйтесь поделиться своими результатами!


enter image description here

0
Scott

Я не уверен, что полностью понимаю это, но кажется возможным получить ответ с

=SUMPRODUCT(COUNTIF($E$2:$E$3,$A$2:$A$10), COUNTIF($F$2:$F$4,$B$2:$B$10), COUNTIF($G$3,$C$2:$C$10)) 

Чтобы попытаться объяснить: как мы знаем COUNTIF($B$2:$B$10, "Red") (или, что то же самое, COUNTIF($B$2:$B$10, $F$2)подсчитывает красный плод, получая счет 3. Аналогично, COUNTIF($B$2:$B$10, "Green") (или, что то же самое, COUNTIF($B$2:$B$10, $F$3)считает зеленый плод, получая счет 5. Поэтому интуитивно заманчиво попытаться использовать COUNTIF($B$2:$B$10, $F$2:$F$3) посчитать фрукты, которые являются красными или зелеными. Это не работает само по себе, но мы можем заставить его работать, делая

=SUM(COUNTIF($B$2:$B$10, $F$2:$F$3)) 

как формула массива, или

=SUMPRODUCT(COUNTIF($B$2:$B$10, $F$2:$F$3)) 

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

Но приведенные выше формулы в точности соответствуют тому, что вы ожидали в предыдущем обсуждении: они добавляют 3 + 5 и получают 8. Это важно: они добавляют массив из двух чисел, потому что мы смотрим на два цвета. Это создает нам проблемы, когда мы ищем разное количество значений в разных столбцах.

COUNTIF($E$2:$E$3, "Yellow"), COUNTIF($E$2:$E$3, "Red")И COUNTIF($E$2:$E$3, "Green")не кажется, на первый, чтобы сделать столько же смысла; они имеют значения 0, 1 и 1 соответственно. Но это означает, что COUNTIF($E$2:$E$3,$A$2:$A$10)получается массив из девяти чисел, а именно: 0, 1, 1, 1, 1, 1, 1, 1, 1 и 1. Угадайте, что? Сумма еще 8.

Помните, как SUMPRODUCTработает.  SUMPRODUCT(X11:X14, Y11:Y14, Z11:Z14)например, равно

( X11× Y11× Z11) +
( X12× Y12× Z12) +
( X13× Y13× Z13) +
( X14× Y14× Z14)

поэтому он должен иметь аргументы массива одинаковой длины. Два, два и один - проблема; 15, 26, и какой-то другой номер является проблемой. Девять, девять и девять это хорошо.

Теперь посмотрим на X, Y, Zнапример, но сделать эти замены:

  • X11A2это один из фруктов, который мы ищем,
  • Y11B2это один из цветов, которые мы ищем,
  • Z11C2«нет»,

и так далее вниз. Поскольку TRUE равно 1, а FALSE равно 0, каждая строка SUMPRODUCTматрицы равна 1, если каждый столбец содержит искомое значение (потому что 1 × 1 × 1 = 1), и 0, если строка неприемлема в каждом столбце. Итак, у нас есть список из девяти нулей и единиц, который мы добавляем.

-3
Rajesh S

Поскольку это ключевой вопрос, « я бы хотел посчитать количество яблок и груш (не бананов), которые бывают зелеными или красными, но не ядовитыми ».

Поэтому я хотел бы предложить решение в формате таблицы соответствует вашим требованиям.

Проверьте снимок экрана:

enter image description here

Запишите эту формулу в E2: =COUNTIFS($A$2:$A$10, "="&$D2,$B$2:$B$10,"="&E$1)

Обратите внимание: заполните ячейку Формулы 1 справа, затем на одну строку вниз, вы получите количество яблок и груш.

Запишите эту формулу в G2: =COUNTIFS($A$2:$A$10, "="&$D2,$C$2:$C$10,"=No")

Заметьте, заполните Формула-1 на ряд, вы получите количество неядовитых яблок и груш.

Наконец, суммируйте неядовитую колонку.

спасибо, это работает конечно. Тем не менее, мой вопрос о грушах и яблоках был только примером, мои фактические файлы данных содержат совершенно другую и гораздо более сложную информацию. Например, диапазон первого критерия (эквивалент яблок ИЛИ груш) охватывает более 15 различных значений, а диапазон второго критерия (эквивалент красного ИЛИ зеленого) охватывает 26 разных значений, таким образом, всего 15 X 26, а не 2 X 2. Что мне действительно нужно, так это одна формула, а не разбить ее на несколько ... В этом примере, одна формула, чтобы дать ответ 4. Pjossemannen 5 лет назад 0
На самом деле, нет, это не работает. Хорошо, да, он дает правильный ответ (4), но он получает правильный ответ по неправильной причине; по стечению обстоятельств. Именно он считает неядоватые яблоки и груши независимо от цвета. Это очевидно, когда вы смотрите на это: в конечном итоге ответ `= SUM (G2: G3)`, где формула для `G2` и` G3` смотрит на столбцы `A`,` D` и `C `- где столбцы` A` и `D` являются фруктами (яблоко / банан / груша), а столбец` C` ядовит (да или нет). Он не смотрит на столбец `B` (цвет), а промежуточные результаты в ячейках` E2: F3` не используются в окончательном ответе. Scott 5 лет назад 1
@Pjossemannen ,, приятно услышать от вас, если это работает для вас, то, пожалуйста, либо проголосуйте, либо примите в качестве ответа. И я решил проблему на основе информации, которую вы нам передали. Относительно ваших фактических данных, только я могу сказать, если данные не доступны, я не могу сказать, что делать дальше. если вы чувствуете, напишите мне, найдите мой идентификатор в профиле. Rajesh S 5 лет назад 0
Как сказал Скотт, окончательный результат не учитывает цветовые критерии, поэтому это решение не работает. piko 5 лет назад 0

Похожие вопросы