如何在Excel中使用函数实现多列GROUP BY并统计分组计数(无需VBA)
用Excel函数实现多列分组计数(Fruit/Color/Vendor)
对应你提供的T-SQL分组逻辑:
SELECT Fruit, Color, Vendor, COUNT(*) AS Count FROM FruitVendorTable GROUP BY Fruit, Color, Vendor
下面提供两种纯函数实现方案,无需VBA:
方案1:Excel 365/2021 动态数组方案(最便捷)
生成唯一分组组合:
在空白区域的起始单元格(比如G2)输入公式:=UNIQUE(A2:C[最后行号])
替换[最后行号]为你的台账数据实际结束行,公式会自动溢出所有不重复的Fruit、Color、Vendor组合。计算每组计数:
在计数列的起始单元格(比如J2)输入公式:=BYROW(G2#:I2#, LAMBDA(row, COUNTIFS(A:A, INDEX(row,1), B:B, INDEX(row,2), C:C, INDEX(row,3))))
这里G2#:I2#是第一步生成的动态数组范围,公式会自动为每一行分组计算对应计数,完全匹配T-SQL的结果。
方案2:旧版Excel(无动态数组支持)方案
如果你的Excel版本不支持动态数组,用辅助列+数组公式实现:
添加辅助列生成唯一标识:
在台账数据右侧新增一列(比如D列),D2输入:=A2&B2&C2
下拉填充到所有数据行,把三列内容合并成一个唯一字符串标识每组。提取唯一分组标识:
在空白区域的G2输入数组公式(输入后按Ctrl+Shift+Enter确认):=INDEX(D:D, MATCH(0, COUNTIF(G$1:G1, D:D), 0))
下拉填充直到出现#N/A,这就是所有不重复的分组标识。还原分组列内容:
- H2(Fruit):
=INDEX(A:A, MATCH(G2, D:D, 0)) - I2(Color):
=INDEX(B:B, MATCH(G2, D:D, 0)) - J2(Vendor):
=INDEX(C:C, MATCH(G2, D:D, 0))
下拉填充到对应行。
- H2(Fruit):
计算每组计数:
K2输入:=COUNTIF(D:D, G2)
下拉填充即可得到每组的计数。
内容的提问来源于stack exchange,提问作者GaryTheBrave
相关产品推荐
相关产品推荐

