我正在尝试提出一个excel公式来查找单元格中用空格或逗号分隔的每个单词,将每个单词与单词列表进行匹配,并在另一列中返回找到的单词。 例如:
因此ColorFamily列应为公式 我已经尝试使用VLOOKUP例如
=VLOOKUP(H3,color_family!$A$3:$A$19,1,FALSE)
但是限制是它不会遍历单元格中的每个单词。可以使用Excel公式来执行此操作吗?还是需要VBA?
答案 0 :(得分:1)
我对所接受的答案不太了解,但这是一种类似的方法。这在Excel 365中有效,并且取决于其动态数组功能是否起作用。
这是我正在使用的电子表格布局:
我已经使用空格来分隔颜色列表中的值,但是该解决方案可以推广为处理逗号等。
我用来构建所需公式的步骤是:
使用TEXTJOIN将有效列表分组为单个字符串:TEXTJOIN(",",TRUE,$A$7:$A$9)
将“颜色”单元格拆分为单词列(使用动态数组功能)。这里有关于如何执行此操作的文章:https://www.mrexcel.com/board/excel-articles/split-text-cell-into-columns-of-words.19/例如对于A2,此公式在单独的列中产生黑色和红色
TRIM(MID(SUBSTITUTE(A2," ",REPT(" ",LEN(A2))),SEQUENCE(1,LEN(A2)-LEN(SUBSTITUTE(A2," ",""))+1,1,LEN(A2)),LEN(A2)))
使用FIND查找有效列表中上方各列中的文本
如果FIND返回一个数字(使用ISNUMBER检查),则返回文本,否则返回“
这仍然位于单独的列中,因此现在使用TEXTJOIN将结果组合在一起,并以逗号分隔的列表。
B2中的最终公式:
`=TEXTJOIN(",",TRUE,IF(ISNUMBER(FIND(TRIM(MID(SUBSTITUTE(A2," ",REPT(" ",LEN(A2))),SEQUENCE(1,LEN(A2)-LEN(SUBSTITUTE(A2," ",""))+1,1,LEN(A2)),LEN(A2))),TEXTJOIN(",",TRUE,$A$7:$A$9))),TRIM(MID(SUBSTITUTE(A2," ",REPT(" ",LEN(A2))),SEQUENCE(1,LEN(A2)-LEN(SUBSTITUTE(A2," ",""))+1,1,LEN(A2)),LEN(A2))),""))`
可以复制到B3,B4等中以得到最终结果:
答案 1 :(得分:0)
输入为数组公式( ctrl + shift + enter ):
=TEXTJOIN(" ",TRUE,IF(ISERR(FIND(color_family!$A$3:$A$19,H3)),"",color_family!$A$3:$A$19))