Excel:帮我使用COUNTIFS查找A或B,但不查找A和B

时间:2019-07-20 01:37:34

标签: excel

我有这个调查表,它在3行中给出了答案分数(3个调查表)。我需要找到具有Q1 >=30Q2 >12Q3 <=33的那些。我一直在搜寻和尝试解决方案,但通过手动计数进行比较时失败了。

请参见屏幕截图(第AN / AT / BC行将作为Q1 / Q2 / Q3的答案)

enter image description here

BD/BE行上,您可以看到我的手动计数,这是一个PITA,容易出错。

该公式帮助我计算包括Q1+Q2+Q3在内的所有值:

=COUNTIFS(AN4:AN147;">=30";AT4:AT147;">=12";BC4:BC147;">=0"; BC4:BC147;"<=33")

我需要的公式是查找其中AN或AT或BC具有给定值的实例。对于AN来说> = 30,对于AT来说>> 12,对于BC来说<= 33。例如,如果一个响应者有31(!),10、40,那么,如果一个响应者有31(!),15(!),41,则应将他计为“ 1”(或只是计算)。那么如果一位响应者有25),10、41,则他也应计为“ 1”);那么就不应该算他。

这是一种称为Maslach倦怠量表的倦怠综合症量表,我要在这里得到的是那些处于倦怠风险中的人(必须更改这3个子问卷中的1或2个,但不能像那些个人那样全部3个<患有倦怠综合症

以下是根据要求使用markdown生成器的示例:

| AN    | AT    | BC    |       |       |
|----   |----   |----   |---    |---    |
| 14    | 11    | 41    |       |       |
| 14    | 4     | 43    |       |       |
| 50    | 9     | 41    |       |       |
| 38    | 16    | 20    |       |       |

编辑:无法正确显示它,嗯。 edit2:知道了

2 个答案:

答案 0 :(得分:1)

=SUMPRODUCT(N(((AN>=30)+(AT>=12)+((BC>=0)*(BC<=33)))={1,2}))

其中ANBCAT是引用明显对象的命名范围。

在您的原始公式中,您还测试了BC>0,所以我在上面包括了它。

但是,如果不需要该测试,则公式可以简化为:

=SUMPRODUCT(N(((AN>=30)+(AT>=12)+(BC<=33))={1,2}))

“公式评估”工具可以帮助您了解正在发生的事情。 并且在下面的屏幕快照中,不需要byRow列。只是为了证明每行的测试结果,以供学习。

  • 每个相等测试均根据结果返回一个{TRUE,FALSE}数组。
    • 在Excel TRUE=1FALSE=0中。
  • 对数组求和将得出{0,1,2,3}的数组,具体取决于每行中有多少个匹配项。
  • 然后我们比较这些结果,以查看它们是否等于12,并再次返回另一个{TRUE, FALSE}数组。
  • N函数将{TRUE,FALSE}更改为{1,0}SUMPRODUCT将所有内容加起来。
  • 一个人可以使用SUM函数,但是您必须记住,对于数组公式,您必须在按住ctrl-shift的同时按下enter来确认公式,以确认公式。正确的结果。

enter image description here

答案 1 :(得分:0)

这是一种实现方式:

=SUMPRODUCT( ( ( (AN4:AN7>=30)+(AT4:AT7>12)+(BC4:BC7<=33) )=1)
+( ( (AN4:AN7>=30)+(AT4:AT7>12)+(BC4:BC7<=33) )=2) )

@Ron Rosenfeld的公式是完成同一件事的一种更短,更优雅的方法。

无论如何,如果您考虑一些虚拟数据(如下面的屏幕快照所示,该屏幕快照分别显示满足0、1、2和3个条件的行),则我的公式如下:

第4行:

(FALSE+FALSE+FALSE = 1) => 0+0+0 = 1 => 0=1 => FALSE
(FALSE+FALSE+FALSE = 2) => 0+0+0 = 2 => 0=2 => FALSE
FALSE+FALSE => 0

第5行:

(TRUE +FALSE+FALSE = 1) => 1+0+0 = 1 => 1=1 => TRUE
(FALSE+FALSE+FALSE = 2) => 0+0+0 = 2 => 0=2 => FALSE
TRUE+FALSE => 1

第6行:

(TRUE +TRUE +FALSE = 1) => 1+1+0 = 1 => 2=1 => FALSE
(TRUE +TRUE +FALSE = 2) => 1+1+0 = 2 => 2=2 => TRUE
FALSE+TRUE => 1

第7行:

(TRUE +TRUE +TRUE = 1) => 1+1+1 = 1 => 3=1 => FALSE
(TRUE +TRUE +TRUE = 2) => 1+1+1 = 2 => 3=2 => FALSE
FALSE+FALSE => 0

Sumproduct将四个总数相加。

enter image description here


还有另一种方式(也许比实际用途更有趣,但不涉及伪数组公式):

=COUNTIF(AN4:AN7,">=30")+COUNTIF(AT4:AT7,">=12")+COUNTIF(BC4:BC7,"<=33")
-COUNTIFS(AN4:AN7,">=30",AT4:AT7,">=12")-COUNTIFS(AN4:AN7,">=30",BC4:BC7,"<=33")-COUNTIFS(AN4:AN7,">=12",BC4:BC7,"<=33")

公式的第一行只是将满足一个条件的单个问题加起来。但是,如果满足两个条件,我们将需要重复计算。因此,我们必须为每个对减去一个。如果满足三个条件,该怎么办?我们最终会减去三倍,这使我们回到零,所以没关系。

查看维恩图可能会有所帮助:

enter image description here

注意,有一些证据here证明,对于这种类型的问题,甚至多个sumif可能比sumproducts还要快,但只有当您有 lot 时才相关。数据。