如何用Excel经典公式(无宏/DAX)按Key去重汇总批次并拼接
Excel按Key聚合批次及数量纯公式实现方案
实现逻辑
无需宏、无需DAX,仅用原生Excel公式即可实现需求,核心逻辑分两步:
- 针对目标Key匹配到的所有记录,先对批次号去重,避免同批次重复展示
- 按去重后的批次分组求和,计算每个批次在当前Key下的总数量,最后拼接为要求的格式输出
具体公式
假设数据源结构为:
- A列:Key值列
- B列:批次号列
- C列:单位数量列
- 待匹配的目标Key存放在M4单元格,结果输出到N4单元格
直接在N4输入以下公式即可:
=TEXTJOIN(", ",TRUE,UNIQUE(FILTER(B$2:B$1000,A$2:A$1000=M4))&"("&SUMIFS(C$2:C$1000,A$2:A$1000,M4,B$2:B$1000,UNIQUE(FILTER(B$2:B$1000,A$2:A$1000=M4)))&")")
公式中
A$2:A$1000/B$2:B$1000/C$2:C$1000请替换为你实际的数据源范围,不要直接引用整列以提升计算效率。
公式各段作用说明
FILTER(B$2:B$1000,A$2:A$1000=M4):筛选出当前目标Key对应的所有批次号,包含重复值UNIQUE():对筛选出的批次号做去重处理,保证每个批次仅出现一次SUMIFS(...):针对每一个去重后的批次,统计当前Key下该批次的所有数量之和,自动合并同批次的多条记录数量- 字符串拼接段:将批次号和括号包裹的汇总数量拼接为
批次号(数量)的标准格式 TEXTJOIN(", ",TRUE,...):将所有拼接完成的批次字符串用逗号+空格连接为最终结果,自动跳过空值
低版本适配说明
如果你使用的是Excel 2019及更早不支持动态数组函数的版本,可以通过辅助列实现:
- 在辅助列第一行输入公式提取当前Key下的第一个不重复批次:
=INDEX(B:B,MATCH(0,IF(A$2:A$1000=M4,COUNTIF(D$1:D1,B$2:B$1000),""),0)+1),按Ctrl+Shift+Enter三键结束数组公式,下拉直到出现错误值 - 在相邻辅助列用
SUMIFS计算每个辅助列批次的总数量 - 最后用
TEXTJOIN(2019版支持该函数)拼接结果即可
效果验证
针对同Key下两条LOT1、单条数量15的场景,公式会自动去重得到单个LOT1,汇总数量为30,最终输出LOT1(30),不会出现重复展示批次的问题。
内容的提问来源于stack exchange,提问作者Yilas
相关产品推荐
相关产品推荐

