如何用单个Excel函数返回求和排序后的前3结果(忽略并列溢出)
实现单个函数返回表格求和后的前N结果(忽略多余并列项)
需要用单个Excel函数实现:对表格中的分类项求和后,返回前N个结果,当存在并列求和值时,仅保留前N个(忽略后续并列项)。目前通过引用其他单元格可实现,但需要单个函数完成,之前尝试结合Filter的Lambda会因并列值返回超过N个结果,现寻求解决方案。
完整Lambda函数
=LAMBDA(rDesc, rSum, top, default, LET( uniqueDesc, UNIQUE(rDesc), sumVals, SUMIFS(rSum, rDesc, uniqueDesc), sortedData, SORTBY(HSTACK(uniqueDesc, sumVals), sumVals, -1), topResults, IFERROR(INDEX(sortedData, SEQUENCE(top), {1,2}), default), topResults ) )
函数说明
- 参数定义:
rDesc:分类列(示例中的Food列)rSum:求和列(示例中的Sold列)top:需要返回的前N个结果数量(示例中为3)default:当结果不足N个时的填充值(示例中用"-")
- 关键逻辑:
- 用
UNIQUE提取唯一分类项,SUMIFS计算每个分类的求和值 - 用
HSTACK合并分类名与求和值为两列数据,SORTBY按求和值降序排序 - 直接用
INDEX提取排序后的前top行,彻底避免FILTER会选中所有并列值的问题;IFERROR处理结果不足N个的填充场景
- 用
示例验证
输入数据:
| Food | Sold |
|---|---|
| Apple | 20 |
| Banana | 10 |
| Apple | 30 |
| Apple | 3 |
| Carrot | 5 |
| Milk | 10 |
| Peas | 10 |
| Kale | 1 |
调用方式:
假设将上述Lambda命名为TopNSum,数据区域为A2:B9,调用语句:
=TopNSum(A2:A9, B2:B9, 3, "-")
输出结果:
| Apple | 53 |
|---|---|
| Banana | 10 |
| Milk | 10 |
(注:Peas求和值虽为10,但因仅需前3个结果被排除)
内容的提问来源于stack exchange,提问作者DChi Shaggy
相关产品推荐
相关产品推荐

