如何编写Excel数组公式提取邻列满足指定条件的列表唯一值
指定分类下唯一值提取方案
通用兼容方案(适配Excel 2019及更早版本,支持数组公式)
假设分类数据存放在A列,对应代码存放在B列,数据范围为A2:B7(可根据实际数据范围调整),在结果输出列的首个单元格输入以下公式,输入完成后按Ctrl+Shift+Enter确认数组公式,向下拖动填充直到单元格出现#N/A即为所有结果提取完成:
=INDEX($B:$B,MATCH(0,IF($A:$A="GOLD",COUNTIF($C$1:C1,$B:$B),1),0))
公式逻辑说明:
- 用IF分支做判断:当A列分类不是
GOLD时,直接返回值1,和MATCH要查找的目标值0不匹配,不会被定位;当A列分类为GOLD时,通过COUNTIF统计对应B列代码是否已经在上方已输出的结果中出现过,未出现的代码会返回计数0,正好被MATCH定位到对应行号 - 不需要额外处理零值,非目标分类行的返回值永远不会命中MATCH的查找目标,自然不会被纳入结果列表,针对你给出的示例数据,会依次返回
GLD、JNUG,和预期结果一致。
高版本Excel简便方案(适配Excel 365/2021及以上版本)
不需要数组确认、不需要手动拖动填充,直接在结果输出首个单元格输入以下公式,会自动溢出所有符合要求的结果:
=UNIQUE(FILTER(B:B,A:A="GOLD"))
公式逻辑说明:
- 先用
FILTER函数直接筛选出A列分类为GOLD的所有B列代码,从源头过滤掉其他分类的冗余行,不会产生无效值 - 外层套
UNIQUE函数直接对筛选结果去重,一步得到目标结果,计算效率更高。
原有公式问题原因
之前写判断逻辑时,条件不成立的分支返回了0或空值,这类值会被MATCH纳入匹配范围,当目标结果中不存在0值时,MATCH会错误定位到条件不成立的行,导致返回无效结果。只要把条件不成立分支的返回值设置为和MATCH查找目标不一致的内容(比如上述公式中的1,或直接返回#N/A错误),MATCH会自动跳过这些无效项,就不会出现冗余值被识别的问题。
内容的提问来源于stack exchange,提问作者Dave X.
相关产品推荐
相关产品推荐

