大数据量下基于最小Order值筛选分组的Excel公式优化问询
解决方案
一、无辅助列高效提取每组最小Order对应行
针对20万条大数据量,避免使用SUMPRODUCT这类全数组遍历函数,改用Excel 365/2021支持的动态数组函数,计算效率会大幅提升:
方案1:GROUPBY函数(推荐,最简洁高效)
GROUPBY是专门的分组聚合函数,对大数据量优化极佳:
=GROUPBY(D2:D200001, B2:D200001, LAMBDA(x, XLOOKUP(MIN(INDEX(x,,2)), INDEX(x,,2), x)), 0, 1)
- 参数说明:
D2:D200001:分组依据(姓名列)B2:D200001:需保留的目标列(国家、Order、姓名)LAMBDA(x, ...):对每个分组,先提取Order列的最小值,再用XLOOKUP匹配对应整行数据- 末尾
0,1:保留分组原始顺序并自动去重
方案2:UNIQUE+XLOOKUP组合(兼容部分旧版本)
若你的Excel不支持GROUPBY,可使用此组合:
=LET( 唯一姓名, UNIQUE(D2:D200001), 最小Order值, MINIFS(C2:C200001, D2:D200001, 唯一姓名), XLOOKUP(唯一姓名&最小Order值, D2:D200001&C2:C200001, B2:D200001) )
- 参数说明:
LET函数定义变量,减少重复计算、提升效率- 先提取唯一姓名列表,再用
MINIFS获取每个姓名对应的最小Order值 - 用「姓名+Order」作为匹配键,通过
XLOOKUP定位对应行的完整数据
二、按姓名分组+Order升序排序
若需最终结果按姓名升序、再按Order升序排列,只需在上述函数外层嵌套SORT:
适配GROUPBY方案:
=SORT(GROUPBY(D2:D200001, B2:D200001, LAMBDA(x, XLOOKUP(MIN(INDEX(x,,2)), INDEX(x,,2), x)), 0, 1), {3,2}, {1,1})
- 说明:
{3,2}表示先按第3列(姓名)排序,再按第2列(Order)排序;{1,1}表示均为升序
适配UNIQUE+XLOOKUP方案:
=SORT(LET( 唯一姓名, UNIQUE(D2:D200001), 最小Order值, MINIFS(C2:C200001, D2:D200001, 唯一姓名), XLOOKUP(唯一姓名&最小Order值, D2:D200001&C2:C200001, B2:D200001) ), {3,2}, {1,1})
效率对比说明
原方案的SUMPRODUCT会对每一行遍历20万条数据,总计算量达400亿次,资源占用极高;新方案使用的GROUPBY/MINIFS/XLOOKUP均为Excel原生优化函数,计算量大幅降低,大数据量下处理速度显著提升。
内容的提问来源于stack exchange,提问作者Miaka3
相关产品推荐
相关产品推荐

