Excel中基于另一列值的某列区分大小写唯一值计数
按店铺统计区分大小写的唯一商品数(使用SUMPRODUCT和EXACT)
可以通过扩展SUMPRODUCT、EXACT函数,结合矩阵运算(或IF条件)实现需求。以下是具体解决方案:
核心公式(适用于Excel 365/2021)
假设E2单元格为目标店铺名称(如"Costco"),F2的计算公式为:
=SUMPRODUCT(--($C$2:$C$10=E2), 1/MMULT(--EXACT($B$2:$B$10, TRANSPOSE($B$2:$B$10)), --($C$2:$C$10=E2)))
旧版Excel(2019及更早)注意事项
需按Ctrl+Shift+Enter组合键作为数组公式输入,而非单独按Enter。
公式原理拆解
以你提到的"Costco"案例(商品为"Apple"、"apple"、"Apple",预期结果2)为例:
--($C$2:$C$10=E2):生成由1和0组成的数组,标记出属于目标店铺的行。EXACT($B$2:$B$10, TRANSPOSE($B$2:$B$10)):生成区分大小写的匹配矩阵,每个元素表示对应两个商品是否完全一致(大小写敏感)。MMULT(--(...), --($C$2:$C$10=E2)):通过矩阵乘法,计算每个商品在目标店铺内的区分大小写出现次数。案例中得到数组[2,1,2,...]("Apple"出现2次,"apple"出现1次)。1/MMULT(...):将次数转换为倒数(如1/2、1/1),同一商品的所有倒数之和为1,实现"去重计数"。SUMPRODUCT(--($C$2:$C$10=E2), 1/...):筛选目标店铺的行并求和,最终得到区分大小写的唯一商品数(案例中1/2+1+1/2=2)。
含IF语句的替代版本
若需显式使用IF条件过滤店铺,可使用以下公式:
=SUMPRODUCT(--($C$2:$C$10=E2), 1/MMULT(--IF($C$2:$C$10=E2, EXACT($B$2:$B$10, TRANSPOSE($B$2:$B$10)), 0), --($C$2:$C$10=E2)))
其中IF语句仅保留目标店铺的商品匹配结果,缩小矩阵运算范围。
内容的提问来源于stack exchange,提问作者kjd513
相关产品推荐
相关产品推荐

