excel - 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 方式,但是我还需要在每一行上做一个额外的单元格才能累积结果。
我希望有人能帮帮忙。
谢谢你。
解决方案
根据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]
充满True
or的矩阵False
,因此我们在矩阵前添加双减号,迫使它们变为1
and 0
。
TRANSPOSE
是用来生成[9 x 1]
矩阵的,大于0的时候这个值其实就不那么重要了。其实我们可以用a ,ROW(1:9)
效果是一样的。但是,并不是每个人都知道如何调整ROW()
. 一个好处TRANSPOSE(COLUMN())
是内部的引用与原始数据区域相同。
执行后MMULT
,结果变成一个[3 x 1]
矩阵。如果它与条件匹配,则值大于0,其他将为0。所以下一部分是检查矩阵中的每个元素是否>0
存在。然后我们再次添加一个双减号来将布尔值转换为0
and 1
。这里的最后一部分只是简单地总结它们SUMPRODUCT
。
[#1] 更多关于矩阵乘法的信息:https ://en.wikipedia.org/wiki/Matrix_multiplication
推荐阅读
- scala - Scala 分组并从 List[String] 中找到最小值和最大值
- ios - 静息心率法
- java - 为什么在内部类中使用时必须将字段声明为 final?
- php - php添加具有相同值的数组
- angular - 通过最后一篇文章对 json 对象数组进行 Angular 排序
- bash - 如何将子shell中命令的返回状态获取到主shell中?
- javascript - jquery函数调用不起作用
- javascript - “str.fromCharCode 不是函数”
- algorithm - 我需要一种算法来遍历具有可选和替代节点的树来计算所有可能的路径
- asp.net - IIS 似乎没有压缩 ashx 创建的响应