Excel多条件统计唯一值(含逗号分隔列表匹配)
Excel统计符合条件的唯一公司数量问题
问题背景
现有数据结构:
- A列:Yes/No 标识
- B列:公司名称
- C列:所在城市
- D列:逗号分隔的所属行业列表
需统计同时满足以下条件的唯一公司名称数量:
- A列值为"Yes"
- C列等于指定城市(如"Mycity")
- D列的行业列表包含指定行业(如"IndustryName")
尝试以下公式未得到预期结果:
=SUM(IF(FREQUENCY(IF((A2:A100="Yes")*(C2:C100="Mycity")*(ISNUMBER(SEARCH("IndustryName", D2:D100))), MATCH(B2:B100,B2:B100,0)),ROW(B2:B100)-ROW(B2)+1),1))
优化解法
解法1:Excel 365/2021 动态数组公式(推荐)
利用动态数组函数组合,逻辑清晰易维护:
=COUNTA(UNIQUE(FILTER(B2:B100,(A2:A100="Yes")*(C2:C100="Mycity")*(ISNUMBER(SEARCH("IndustryName",D2:D100))))))
- 步骤拆解:
FILTER:筛选出所有符合三个条件的公司名称UNIQUE:对筛选结果去重,保留唯一公司名COUNTA:统计去重后的公司数量
- 优势:无需手动按数组快捷键,空结果自动返回0,可读性强
解法2:兼容旧版Excel的数组公式
若使用不支持动态数组的旧版Excel,修正原公式逻辑后,按Ctrl+Shift+Enter输入:
=SUM(--(FREQUENCY(IF((A2:A100="Yes")*(C2:C100="Mycity")*(ISNUMBER(SEARCH("IndustryName",D2:D100))),MATCH(B2:B100,B2:B100,0)),ROW(B2:B100)-ROW(B2)+1)>0))
- 修正说明:原公式中
IF(...,1)的逻辑有误,改为--(FREQUENCY(...)>0),确保仅对首次出现的唯一公司计数 - 原理:
FREQUENCY会将重复公司的匹配位置归为同一组,仅首次出现的位置返回非零值,通过>0判断后转成数值,求和得到唯一数量
额外注意点
- 若需区分行业名称大小写,将
SEARCH替换为FIND - 若D列行业存在空格(如"IT, 金融"),可优化匹配逻辑避免部分误匹配:
该写法会给行业列表首尾加逗号,确保匹配的是完整的行业项。ISNUMBER(SEARCH(", "&"IndustryName"&", ", ", "&D2:D100&", "))
内容的提问来源于stack exchange,提问作者CatiS
相关产品推荐
相关产品推荐

