Excel中统计指定区域内多文本同时出现的次数
我的表格A1:G6区域包含5条交易记录,每行对应一条交易,每行多列填写代表产品类别的字母(比如F代表水果、M代表牛奶)。需要统计各类别组合在该区域的出现次数。
单个类别统计公式我已经掌握:=SUMPRODUCT(($B$2:$G$2=B10)+($B$3:$G$3=B10)+($B$4:$G$4=B10)+($B$5:$G$5=B10)+($B$6:$G$6=B10))
但不知道如何编写多个类别同时出现在同一交易行(逻辑与,非逻辑或)的统计公式,求解决方案。
解决方案
核心思路
统计多类别同时出现的交易数,本质是检查每一行是否同时包含所有目标类别,再统计符合条件的总行数。
1. 双类别同时出现的统计公式
以统计B列和C列指定类别(如B11的B、C11的F)同时出现的交易数为例,可用以下公式:=SUMPRODUCT(--(COUNTIF(OFFSET($B$2:$G$2,ROW($B$2:$G$6)-ROW($B$2),0,1),B11)>0),--(COUNTIF(OFFSET($B$2:$G$2,ROW($B$2:$G$6)-ROW($B$2),0,1),C11)>0))
2. 多类别(3个及以上)同时出现的统计公式
针对3个类别(如B26的B、C26的M、D26的F),可直接扩展公式:=SUMPRODUCT(--(COUNTIF(OFFSET($B$2:$G$2,ROW($B$2:$G$6)-ROW($B$2),0,1),B26)>0),--(COUNTIF(OFFSET($B$2:$G$2,ROW($B$2:$G$6)-ROW($B$2),0,1),C26)>0),--(COUNTIF(OFFSET($B$2:$G$2,ROW($B$2:$G$6)-ROW($B$2),0,1),D26)>0))
公式说明
OFFSET($B$2:$G$2,ROW($B$2:$G$6)-ROW($B$2),0,1):逐行提取交易数据(从B2:G2到B6:G6)COUNTIF(..., 类别):检查当前行是否包含目标类别,返回1(包含)或0(不包含)--(...)>0:将COUNTIF结果转换为布尔值对应的1/0SUMPRODUCT:将每行的多类别检查结果相乘(仅当所有类别都存在时乘积为1),最终求和得到符合条件的交易行数
数据与预期输出
| 交易ID | 产品购买记录 | |||||
|---|---|---|---|---|---|---|
| T01 | C | V | M | |||
| T02 | P | K | D | M | B | F |
| T03 | M | B | J | V | N | |
| T04 | P | V | F | M | ||
| T05 | V | K | M | F | ||
| 项集识别 | ||||||
| 序号 | 项目1 | 项目2 | 项目3 | 项目4 | 项目5 | 计数 |
| 1 | B | 2 | ||||
| 2 | C | 1 | ||||
| 3 | D | 1 | ||||
| 4 | F | 3 | ||||
| 5 | J | 1 | ||||
| 6 | K | 2 | ||||
| 7 | M | 5 | ||||
| 8 | N | 1 | ||||
| 9 | P | 2 | ||||
| 10 | V | 4 | ||||
| 11 | B | F | 1 | |||
| 12 | B | K | 1 | |||
| 13 | B | M | 2 | |||
| 14 | B | P | 1 | |||
| 15 | B | V | 1 | |||
| 16 | F | K | 2 | |||
| 17 | F | M | 3 | |||
| 18 | F | P | 2 | |||
| 19 | F | V | 2 | |||
| 20 | K | M | 2 | |||
| 21 | K | P | 1 | |||
| 22 | K | V | 1 | |||
| 23 | M | P | 2 | |||
| 24 | M | V | 4 | |||
| 25 | P | V | 1 | |||
| 25 | B | M | F | 1 |
内容的提问来源于stack exchange,提问作者MaCaZaKa

