Excel中如何基于订单号统计对应唯一商品编号数量?
订单号下唯一商品编号统计方案(保留所有原行)
针对你无法删除重复行、需要在每个订单首行统计唯一商品数的需求,提供两种可行方案:
一、Excel公式法(支持实时更新)
1. 适用于Excel 365/2021(动态数组版本)
在第一个「商品计数」单元格(对应示例的C2)输入以下公式,下拉填充即可:
=IF(COUNTIF($A$2:A2,A2)=1,COUNTA(UNIQUE(FILTER($B$2:$B$19,$A$2:$A$19=A2))),"")
- 逻辑:用
COUNTIF($A$2:A2,A2)=1判断当前行是否为该订单的第一行; - 是首行则通过
FILTER筛选该订单所有商品编号,UNIQUE去重后用COUNTA统计数量; - 非首行返回空值,和示例格式完全匹配。
2. 适用于旧版Excel(无动态数组支持)
使用数组公式,在C2输入后按Ctrl+Shift+Enter确认,再下拉填充:
=IF(COUNTIF($A$2:A2,A2)=1,SUMPRODUCT(($A$2:$A$19=A2)/COUNTIFS($A$2:$A$19,$A$2:$A$19,$B$2:$B$19,$B$2:$B$19)),"")
- 逻辑:通过
SUMPRODUCT结合COUNTIFS计算每个订单下唯一商品的数量,避免重复统计。
二、Power Query法(适合大型数据集,高效处理每日更新)
如果数据集规模很大,公式计算卡顿,推荐用Power Query批量处理,不破坏原数据:
- 选中数据区域,点击「数据」>「自表格/区域」导入Power Query编辑器;
- 点击「转换」>「分组依据」:
- 分组列选择「订单号(Order no.)」;
- 新列名设为「唯一商品数」,操作选择「所有行」;
- 添加自定义列,公式为:
List.Count(List.Distinct([所有行][商品编号(Item no.)])) - 删除「所有行」列,回到原数据表,点击「合并查询」,按「订单号」将原表和分组后的表合并;
- 添加条件列:判断当前行是否为该订单的第一行(可先添加索引列,再按订单号分组标记首行),仅在首行填充「唯一商品数」,其余行留空;
- 点击「关闭并上载」,将结果加载回Excel。后续每日更新数据后,右键刷新即可自动更新统计结果。
内容的提问来源于stack exchange,提问作者Scooby don't
相关产品推荐
相关产品推荐

