Excel公式需求:通过子串匹配实现交易自动分类
Excel交易描述按子串匹配商户类别解决方案
核心公式方案
针对你的需求,以下两种公式可实现A列交易描述与C列子串的包含匹配,并返回D列对应的商户类别:
1. 返回第一个匹配的类别(推荐)
使用XLOOKUP结合ISNUMBER+SEARCH实现数组匹配,会返回第一个命中的子串对应的类别:
=XLOOKUP(TRUE,ISNUMBER(SEARCH($C$2:$C$101,A2)),$D$2:$D$101,"无匹配")
- 旧版Excel需按
Ctrl+Shift+Enter触发数组计算,新版Excel直接回车即可 - 最后一个参数
"无匹配"可替换为你需要的无匹配提示内容
2. 返回最后一个匹配的类别
若需要返回最后一个命中的子串对应的类别,使用LOOKUP公式:
=IFERROR(LOOKUP(2,1/ISNUMBER(SEARCH($C$2:$C$101,A2)),$D$2:$D$101),"无匹配")
IFERROR用于处理无匹配时的#N/A错误,替换为自定义提示
迁移至新工作表后的适配
当C、D列移至名为商户类别的新工作表时,只需修改公式的引用范围:
# XLOOKUP版本 =XLOOKUP(TRUE,ISNUMBER(SEARCH('商户类别'!$C$2:$C$101,A2)),'商户类别'!$D$2:$D$101,"无匹配") # LOOKUP版本 =IFERROR(LOOKUP(2,1/ISNUMBER(SEARCH('商户类别'!$C$2:$C$101,A2)),'商户类别'!$D$2:$D$101),"无匹配")
之前方法失效的原因
VLOOKUP/XLOOKUP直接用子串匹配时默认是精确匹配,未结合SEARCH判断包含关系;通配符仅在查找值中添加*时生效,无法批量遍历C列所有子串INDEX-MATCH-ISNUMBER若未以数组形式计算(旧版Excel未按Ctrl+Shift+Enter),则无法遍历所有子串完成匹配
额外注意事项
- 确保C列子串与A列交易描述大小写一致(A列全大写,C列子串建议也统一为大写);若大小写不一致,可将公式中的
SEARCH改为SEARCH(UPPER($C$2:$C$101),A2)强制统一大写匹配 - 若子串存在优先级需求,可调整C列顺序:
XLOOKUP返回第一个匹配项,优先级高的子串放在C列上方;LOOKUP返回最后一个匹配项,优先级高的放在下方
内容的提问来源于stack exchange,提问作者Umby
相关产品推荐
相关产品推荐

