Google Sheets:如何基于搜索词列表批量分配类别?
解决方案
方法1:用BYROW + XLOOKUP(优先匹配第一个符合条件的类别)
这个公式会逐行检查A列文本,匹配到第一个符合条件的搜索词后返回对应类别,未匹配则返回"x":
=ARRAYFORMULA(BYROW(A4:A; LAMBDA(row; IF(row=""; ""; XLOOKUP(TRUE; REGEXMATCH(row; F4:F); E4:E; "x")))))
方法2:用LOOKUP(返回最后一个符合条件的类别,适合无重叠匹配场景)
如果你的搜索词不会在同一行文本中匹配多个类别,或者需要取最后一个匹配的类别,用这个更简洁的公式:
=ARRAYFORMULA(IF(A4:A=""; ""; LOOKUP(2; 1/REGEXMATCH(A4:A; F4:F); E4:E)))
如果需要无匹配时返回"x",用IFERROR包裹即可:
=ARRAYFORMULA(IF(A4:A=""; ""; IFERROR(LOOKUP(2; 1/REGEXMATCH(A4:A; F4:F); E4:E); "x")))
原理:1/REGEXMATCH(A4:A; F4:F) 会将匹配成功的位置转为1,失败的转为错误值;LOOKUP查找比所有1都大的2时,会返回最后一个有效匹配对应的E列值。
为什么你之前的公式不生效?
=ARRAYFORMULA(IF(REGEXMATCH(A4:A;F4:F);E4:E;"x")) 中,REGEXMATCH(A4:A;F4:F) 会生成一个二维数组(A列每行对应F列每个搜索词的匹配结果),而IF函数无法将这个二维数组的结果与A列每行一一对应匹配,导致返回结果混乱,无法实现预期效果。
内容的提问来源于stack exchange,提问作者bliss
相关产品推荐
相关产品推荐

