Google Sheets多条件聚合多行数据:取最大日期+求和方案求助
Google Sheets 多条件聚合多行数据解决方案
需求说明
按前两列非空组合分组,对指定列执行以下聚合操作:
- 取组内第3列(起始日期)的最大值
- 取组内第4列(结束日期)的最大值
- 对第5、6、7列分别求和
- 空值统一标识为
""
输入数据(假设数据范围为A1:G5):
| A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|
| 0 | abc | 16.10.2022 | 18.10.2022 | 1500 | 0 | 79 |
| 425 | abc | 17.10.2022 | 19.10.2022 | 799 | 15 | 145 |
"" | abc | 17.10.2022 | 20.10.2022 | 600 | 0 | 34 |
| 588 | "" | 01.10.2022 | 12.10.2022 | 800 | 30 | 15 |
| 588 | dca | 02.10.2022 | 08.10.2022 | 300 | 0 | 35 |
可行解决方案
使用ARRAYFORMULA+LET+MAXIFS/SUMIFS组合实现一次性聚合,避免FILTER/VLOOKUP/UNIQUE组合的匹配遗漏问题。
完整公式
=ARRAYFORMULA( LET( groups, UNIQUE(FILTER(A:B, A:A<>"", B:B<>"")), groupA, INDEX(groups,,1), groupB, INDEX(groups,,2), maxC, BYROW(groupB, LAMBDA(b, MAXIFS(C:C, B:B, b))), maxD, BYROW(groupB, LAMBDA(b, MAXIFS(D:D, B:B, b))), sumE, BYROW(groupB, LAMBDA(b, SUMIFS(E:E, B:B, b))), sumF, BYROW(groupB, LAMBDA(b, SUMIFS(F:F, B:B, b))), sumG, BYROW(groupB, LAMBDA(b, SUMIFS(G:G, B:B, b))), {groupA, groupB, maxC&"(max date 1)", maxD&"(max date 2)", sumE&"(sum1)", sumF&"(sum2)", sumG&"(sum3)"} ) )
公式逻辑拆解
- 获取有效分组键:
UNIQUE(FILTER(A:B, A:A<>"", B:B<>""))提取所有A、B列均非空的唯一组合,作为聚合分组依据。 - 聚合计算:
MAXIFS:按分组的B列值,匹配所有对应行的日期列,取最大值。SUMIFS:按分组的B列值,匹配所有对应行的数值列,求和。
- 结果格式化:将聚合结果与需求的后缀(如
(max date 1))拼接,输出最终表格。
注意事项
- 确保C、D列设置为日期格式,若为文本格式,需将
MAXIFS中的C:C替换为TO_DATE(C:C),D:D替换为TO_DATE(D:D),保证日期比较准确。 - 若分组逻辑需调整为仅A、B均非空的行参与聚合,只需将
MAXIFS/SUMIFS的匹配条件改为A:A=groupA, B:B=groupB即可。
原方案问题分析
使用FILTER/VLOOKUP/UNIQUE组合时,VLOOKUP仅返回第一个匹配结果,无法处理多值聚合场景;同时FILTER的条件设置易遗漏空值行的匹配,最终导致数据丢失。
内容的提问来源于stack exchange,提问作者Darck Graf
相关产品推荐
相关产品推荐

