Excel 2019:按ID组根据最大值状态生成条件求和列的方法
Excel 2019按ID组批量计算结果
需求规则
- 按ID分组处理数据
- 若组内最大值对应的状态为"not ok",结果返回0,仅显示在该组的最小值行或最大值行
- 若组内最大值对应的状态为"ok",结果返回该组"sum"列的总和,仅显示在该组的最小值行或最大值行
假设数据结构
| 列名 | 用途 |
|---|---|
| A列 | ID(分组依据) |
| B列 | 数值列(用于找组内最大值) |
| C列 | 状态("ok"/"not ok") |
| D列 | sum列(需要求和的列) |
| E列 | 结果列(输出计算结果) |
方案1:在最大值行显示结果
选中组内最大值行的E列单元格,输入以下公式后按Ctrl+Shift+Enter(Excel 2019需手动触发数组公式):
=IF(MAXIFS(B:B,A:A,A2)=B2,IF(C2="ok",SUMIFS(D:D,A:A,A2),0),"")
公式逻辑:
MAXIFS(B:B,A:A,A2):提取当前ID组的最大值- 判断当前行是否为组内最大值行,若是则继续判断状态:
- 状态为"ok":用
SUMIFS计算该组sum列的总和 - 状态为"not ok":返回0
- 状态为"ok":用
- 非最大值行返回空值
方案2:在最小值行显示结果
选中组内最小值行的E列单元格,输入以下公式后按Ctrl+Shift+Enter:
=IF(MINIFS(B:B,A:A,A2)=B2,IF(INDEX(C:C,MATCH(MAXIFS(B:B,A:A,A2),B:B,0))="ok",SUMIFS(D:D,A:A,A2),0),"")
公式逻辑:
MINIFS(B:B,A:A,A2)=B2:判断当前行是否为组内最小值行- 若是,先通过
MAXIFS+MATCH+INDEX找到组内最大值对应的状态 - 根据状态返回对应结果:
- 状态为"ok":返回组内sum列总和
- 状态为"not ok":返回0
- 非最小值行返回空值
示例验证
- ID"123"组:最大值为5(B列第5行),状态为"ok",公式返回
SUM(D:D,A:A,"123")=10+20+40+50+30=150 - ID"456"组:最大值为4(B列第8行),状态为"not ok",公式返回0
内容的提问来源于stack exchange,提问作者matchbox13
相关产品推荐
相关产品推荐

