如何无需辅助列计算各品类最高价格的总和?
解决方案
正确公式
方案1:BYROW + LAMBDA + MAXIFS(逻辑清晰,易理解)
=SUM(BYROW(UNIQUE(FILTER(A13:A100,A13:A100<>"")),LAMBDA(category,MAXIFS(D13:D100,A13:A100,category))))
方案2:QUERY函数(简洁高效)
=SUM(QUERY({A13:A100,D13:D100},"select max(Col2) where Col1 is not null group by Col1 label max(Col2) ''"))
原公式错误分析
第一个公式:
=SUM(ARRAYFORMULA(MAX(FILTER(D13:D100, A13:A100 = UNIQUE(A13:A100)))))
FILTER会把所有匹配任意品类的价格全部提取,MAX仅计算这些价格的全局最大值,而非每个品类的单独最大值,最终SUM结果只是单个最大值,不符合需求。第二个公式:
=SUM(ARRAYFORMULA(IFERROR(VLOOKUP(UNIQUE(D13:D100), {D13:D100, A13:A100}, 2, FALSE), 0)))
逻辑完全偏离需求:UNIQUE取的是价格列的唯一值,VLOOKUP返回对应品类(文本转数值为0),SUM结果为0,完全无法得到各品类最高价之和。第三个公式:
=SUM(ARRAYFORMULA(MAXIFS(D13:D100, A13:A100, UNIQUE(A13:A100))))
MAXIFS不支持数组作为条件参数批量返回结果,仅会返回第一个品类对应的最大值,ARRAYFORMULA未生效,SUM结果为单个最大值。
公式适配说明
两个正确公式均支持A13:A100新增品类/行(只要不超过100行),无需辅助列,且自动忽略空白行(避免空品类干扰计算)。
内容的提问来源于stack exchange,提问作者Manuel Pelletier
相关产品推荐
相关产品推荐

