Excel查找单元格中的每个单词并与列表匹配

时间:2018-07-09 07:46:36

标签: excel excel-formula

我正在尝试提出一个excel公式来查找单元格中用空格或逗号分隔的每个单词,将每个单词与单词列表进行匹配,并在另一列中返回找到的单词。 例如:

Color

因此ColorFamily列应为公式 我已经尝试使用VLOOKUP例如

 =VLOOKUP(H3,color_family!$A$3:$A$19,1,FALSE)

但是限制是它不会遍历单元格中的每个单词。可以使用Excel公式来执行此操作吗?还是需要VBA?

2 个答案:

答案 0 :(得分:1)

我对所接受的答案不太了解,但这是一种类似的方法。这在Excel 365中有效,并且取决于其动态数组功能是否起作用。

这是我正在使用的电子表格布局:

enter image description here

我已经使用空格来分隔颜色列表中的值,但是该解决方案可以推广为处理逗号等。

我用来构建所需公式的步骤是:

  1. 使用TEXTJOIN将有效列表分组为单个字符串:TEXTJOIN(",",TRUE,$A$7:$A$9)

  2. 将“颜色”单元格拆分为单词列(使用动态数组功能)。这里有关于如何执行此操作的文章: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)))

  3. 使用FIND查找有效列表中上方各列中的文本

  4. 如果FIND返回一个数字(使用ISNUMBER检查),则返回文本,否则返回“

  5. 这仍然位于单独的列中,因此现在使用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等中以得到最终结果:

enter image description here

答案 1 :(得分:0)

输入为数组公式( ctrl + shift + enter ):

=TEXTJOIN(" ",TRUE,IF(ISERR(FIND(color_family!$A$3:$A$19,H3)),"",color_family!$A$3:$A$19))