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

Excel查找单元格中的每个单词并与列表匹配,excel,excel-formula,Excel,Excel Formula,我正试图想出一个excel公式来查找单元格中由空格或逗号分隔的每个单词,将每个单词与单词列表进行匹配,并在另一列中返回找到的单词。 例如: 所以ColorFamily列应该是一个公式 我试过使用VLOOKUP,例如 =VLOOKUP(H3,color_family!$A$3:$A$19,1,FALSE) 但它的局限性在于它不能遍历单元格中的每个单词。是否可以使用Excel公式执行此操作,或者是否需要VBA?以数组公式形式输入(ctrl+shift+Enter): =TEXTJOIN(“”,

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

所以ColorFamily列应该是一个公式 我试过使用VLOOKUP,例如

 =VLOOKUP(H3,color_family!$A$3:$A$19,1,FALSE)
但它的局限性在于它不能遍历单元格中的每个单词。是否可以使用Excel公式执行此操作,或者是否需要VBA?

以数组公式形式输入(ctrl+shift+Enter):

=TEXTJOIN(“”,TRUE,IF(ISER(查找(颜色族!$A$3:$A$19,H3)),”,颜色族!$A$3:$A$19))
作为数组公式输入(ctrl+shift+Enter):


=TEXTJOIN(“,TRUE,IF(ISERR(FIND(color\u family!$A$3:$A$19,H3)),”,color\u family!$A$3:$A$19))
我无法理解公认的答案,但这里有一个类似的方法。这在Excel 365中工作,取决于其动态数组功能

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

我用空格来分隔颜色列表中的值,但解决方案可以推广到处理逗号等

我用于构建所需公式的步骤包括:

  • 使用TEXTJOIN将有效列表分组为单个字符串:
    TEXTJOIN(“,”,TRUE,$a$7:$a$9)

  • 将颜色单元格拆分为字列(使用动态数组功能)。这里有一篇关于如何做到这一点的文章:例如,对于A2,这个公式在单独的列中产生黑色和红色

    TRIM(MID(替换为(A2),”,REPT(“,LEN(A2))),SEQUENCE(1,LEN(A2)-LEN(替换为(A2),”)+1,1,LEN(A2)),LEN(A2)))

  • 使用“查找”在有效列表中查找上面每列中的文本

  • 如果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等中,给出最终结果:


    我无法理解这个公认的答案,但这里有一个类似的方法。这在Excel 365中工作,取决于其动态数组功能

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

    我用空格来分隔颜色列表中的值,但解决方案可以推广到处理逗号等

    我用于构建所需公式的步骤包括:

  • 使用TEXTJOIN将有效列表分组为单个字符串:
    TEXTJOIN(“,”,TRUE,$a$7:$a$9)

  • 将颜色单元格拆分为字列(使用动态数组功能)。这里有一篇关于如何做到这一点的文章:例如,对于A2,这个公式在单独的列中产生黑色和红色

    TRIM(MID(替换为(A2),”,REPT(“,LEN(A2))),SEQUENCE(1,LEN(A2)-LEN(替换为(A2),”)+1,1,LEN(A2)),LEN(A2)))

  • 使用“查找”在有效列表中查找上面每列中的文本

  • 如果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等中,给出最终结果:


    您当前正在处理整个单元格。如果您想逐字执行此操作,则必须将字符串拆分为各个单词并查找它们。根据字符串的长度,可以使用多个公式,但VBA也足够了。请查看。我很确定你能做到。你有没有试过find()@Luuklag:你能不能不使用VBA,将一个单元格的内容拆分成不同的单元格?(我认为这只可能使用VBA,而不是公式)@Dominique,利用
    Find()
    Left()
    Right()
    可以将其分为不同的单元格。您目前正在处理整个单元格。如果您想逐字执行此操作,则必须将字符串拆分为各个单词并查找它们。根据字符串的长度,可以使用多个公式,但VBA也足够了。请查看。我很确定你能做到。你有没有试过find()@Luuklag:你能不能不使用VBA,将一个单元格的内容拆分成不同的单元格?(我认为这只可能使用VBA,而不是公式)@Dominique,利用
    Find()
    Left()
    Right()
    可以将它分为不同的单元格。谢谢你的全面回答。谢谢你的全面回答。