Excel按B列分组匹配BD列分组最大值的公式问题求解
按项目ID分组返回累计产量最大值行的实现方案
核心问题定位
你之前两次编写的公式未达预期,根因是公式中对BD列、B列的引用使用了$BD$3:$BD3这类逐行扩展的半相对范围,仅计算从首行到当前行的区间内的最大值,而非对应项目ID在全表范围内的累计产量最大值,导致中间行提前触发匹配逻辑。
可用公式
公式统一从数据第3行开始输入,输入完成后下拉填充整列即可,根据你的Excel版本选择对应写法:
- 适用于Excel 2019/365及以上支持MAXIFS的版本
=IF(BD3=MAXIFS($BD:$BD,$B:$B,B3),BD3,0)
- 适用于Excel 2016及更早不支持MAXIFS的版本
=IF(BD3=SUMPRODUCT(MAX(($B:$B=B3)*$BD:$BD)),BD3,0)
公式逻辑:先锁定全表范围,计算当前行所属项目ID对应的累计产量全局最大值,再判断当前行BD值是否等于该最大值,匹配则返回当前产量值,不匹配则返回0,自动兼容分组最大值为0的场景。
效果验证
套用你提供的样例数据,公式返回结果完全匹配预期:
| Projectid(B列) | cumulative production(BD列) | 计算结果 |
|---|---|---|
| 1 | 20 | 0 |
| 1 | 60 | 0 |
| 1 | 70 | 70 |
| 2 | 0 | 0 |
| 2 | 0 | 0 |
| 3 | 20 | 20 |
| 4 | 0 | 0 |
| 5 | 0 | 0 |
| 6 | 0 | 0 |
| 7 | 10 | 0 |
| 7 | 40 | 0 |
| 7 | 60 | 60 |
原有公式的错误点
- 第一次尝试的SUMIFS公式逻辑不成立:SUMIFS末位参数为求和匹配条件,你传入的
MAX($BD$3:$BD3)仅计算到当前行的全量BD最大值,未关联同项目ID的筛选条件,且SUMIFS本身不适合做等值判断返回原值的场景。 - 第二次尝试的MAXIFS公式引用范围错误:使用逐行扩展的半锁定范围,导致计算到项目分组中间行时,范围仅覆盖到当前行,会把中间值误判为分组最大值返回。
内容的提问来源于stack exchange,提问作者Cathy11
相关产品推荐
相关产品推荐

