首页 > 解决方案 > Excel公式 - 2 countif一个在另一个?

问题描述

这是我在这里的第一个问题,尽管几年前我一直在这里阅读问题。

我正在寻找一种方法来使用 excel 公式计算有多少行符合条件。听起来可能很容易,但到目前为止我还没有做到,可能是因为我没有以正确的方式做到这一点。

我有一张这样的桌子(这里是宠物,但也可以使用任何“对象”数组,比如工人及其效率)

        01.10.2018          02.10.2018              03.10.2018      
        Menu        Wg  Sz  Menu        Wg  Sz  Menu        Wg  Sz
Lassie  Dry food    23  65  Dry food    22  65  Dry food    23  65
Fusel   Meat fodder 12  49  Dry food    14  49  Fish fodder 13  49
Bobo    Fish fodder 33  86  Meat fodder 32  86  Meat fodder 34  86

我问自己这样的问题:有多少宠物吃鱼饲料?50厘米以下的宠物有多少?

我可以在行级别轻松完成此操作,然后添加一个求和单元格(假设在 A 列中):

COUNTIF(3:3,"Fish fodder")
COUNTIF(4:4,"Fish fodder")
COUNTIF(5:5,"Fish fodder")
COUNTIF(A:A,">0")

但我正在寻找一种在单个单元格的公式中执行此操作的方法。

我正在考虑使用 crtl+shift+enter 方式,但是我还需要在每一行上做一个额外的单元格才能累积结果。

我希望有人能帮帮忙。

谢谢你。

标签: excelexcel-formula

解决方案


根据COUNTIF你给出的公式,我想这是你需要的。

在此处输入图像描述

B9 =SUMPRODUCT(--(MMULT(--($B$3:$J$5=$A9),TRANSPOSE(COLUMN($B$3:$J$3)))>0))
B10 =SUMPRODUCT(--(MMULT(--($B$3:$J$5=$A10),TRANSPOSE(COLUMN($B$3:$J$3)))>0))
B11 =SUMPRODUCT(--(MMULT(--(($B$3:$J$5<50)*(($B$2:$J$2)="Sz")),TRANSPOSE(COLUMN($B$3:$J$3)))>0))

这里的所有公式都是数组公式,所以请按Ctrl + Shift + Enter完成它们。

诀窍是,在矩阵中[n x m]*[m x 1] = [n x 1]。但是在excel中,矩阵*矩阵直接不是矩阵乘法[#1]。Array * array 返回一个数组,a11*b11, a12*b12, a13*b13以此类推。我们必须使用一个称为MMULT矩阵乘法的公式。

因此,我们首先建立了一个[3 x 9]矩阵,然后将其与标准"Dry food"进行比较。我们得到一个[3 x 9]充满Trueor的矩阵False,因此我们在矩阵前添加双减号,迫使它们变为1and 0

TRANSPOSE是用来生成[9 x 1]矩阵的,大于0的时候这个值其实就不那么重要了。其实我们可以用a ,ROW(1:9)效果是一样的。但是,并不是每个人都知道如何调整ROW(). 一个好处TRANSPOSE(COLUMN())是内部的引用与原始数据区域相同。

执行后MMULT,结果变成一个[3 x 1]矩阵。如果它与条件匹配,则值大于0,其他将为0。所以下一部分是检查矩阵中的每个元素是否>0存在。然后我们再次添加一个双减号来将布尔值转换为0and 1。这里的最后一部分只是简单地总结它们SUMPRODUCT

[#1] 更多关于矩阵乘法的信息:https ://en.wikipedia.org/wiki/Matrix_multiplication


推荐阅读