如何分组动物名称根据类别列,并放到对应的列(黄色区域)。例如图中,找到食草动物(B列)类别的动物名称(A列),并放到C列(黄色区域)。
如果食草动物中的每个项目的分数为 30,则将总项目乘以 30 写入总数(标记为 X1 的单元格)
答案1
请阅读FILTER() 函数并将其应用到您的数据中:
=FILTER($A$2:$A$29,$B2:$B29=C$2)
现在阅读COUNTIF() 函数并放在第三十行
=COUNTIF($B$2:$B$29,C$2)*30
答案2
由于您标记了 Microsoft Excel 2016,因此您需要绕过不可用的 FILTER。我们可以使用 INDEX 和 AGGREGATE 来实现这一点:
使用C3
下面的公式并向下/向右拖动:
=IFERROR(INDEX($A:$A,AGGREGATE(15,6,ROW($B$3:$B$29)/($B$3:$B$29=C$2),ROW(A1))),"")
我们使用 AGGREGATE 和 B 列的行号,从类别范围的开始位置到结束位置:B3:B29
。我们用来$
锁定范围行和列的位置。
将行号数组除以数组中单元格值的布尔值,结果等于C2
按行得出 TRUE 或 FALSE 的值。
因为我们/
对数组使用了运算符,所以布尔值被转换为它的数值等价物:TRUE
= 1
,FALSE
= 0
。
因此,行号数组除以1
's 和0
's 数组。我们利用 (行) 号除以0
导致错误 (#DIV/0!);AGGREGATE 的第二个参数:6
意味着忽略错误值。这意味着 AGGREGATE 将仅使用满足条件的行号数组,但第一个参数必须使其返回n
该数组的第 th 个位置。我们可以使用14
SMALL 或15
LARGE 来返回n
聚合数组的第 th 个位置。我使用ROW(A1)
(equals 1) 作为第一个 -A2
当向下拖动时,它将变成 (equals 2),等等。
n
如果行号超出聚合数组的行数,则使用 IFERROR ,这将返回索引错误。
对于索引,我使用了整列引用,因此我们不需要计算行减去数组的开头 +1,从而使其变得不必要地复杂。
对于总计,您可以使用 SUMPRODUCT C30
(向右拖动):
=SUMPRODUCT(N($B$3:$B$29=C$2))*30
使用与聚合函数中相同的布尔逻辑,N()
将 TRUE 和 FALSE 转换为 1 和 0。SUMPRODUCT 将 1 和 0 相加,然后将结果乘以 30。
如果您有较新的 Excel(2021、Office 365),则可以使用以下方式一次性得出总数:
=MMULT(TOROW(N(B3:B29<>"")*30),N(B3:B29=C2:E2))
。
有关 MMULT 的更多信息这里