如何根据另一列包含带分隔符的string在Excel中对列进行分类; string可以有两个单独的单词

这个问题跟在前面的查询之后: 如何根据另一列包含string中的值用分号分隔excel中的列

我有以下电子表格(请点击以下链接查看图片): 原始数据和预期输出

我的问题是我想对原始数据进行分类,所以输出结果如B16:B34和C16:C34所示。 当他们的兴趣在一个包含以多个分号分隔的string的列中时,我试图按照他们的兴趣对他们进行分类。 这个名字可以根据自己的兴趣多次出现,比如电影,动作片,音乐,摇滚乐,爵士音乐和广播。

我已经尝试了@Glitch_doctor提供的答案:

{= IFERROR(INDEX($ B $ 1:$ B $ 11 SMALL(IF(ISNUMBER(SEARCH(B $ 15 $ C $ 1:$ C $ 11)),ROW($ C $ 1:$ C $ 11)-ROW(INDEX( $ C $ 1:$ C $ 11,1,1))+ 1),ROW(1:1))), “”)}

答案的问题是,当一个人的兴趣实际上是动作电影时,他们出现在电影分类中。 我试图匹配时,他们的兴趣是动作电影,他们只在行动电影分类后显示。 多个单词似乎不适用于SEARCHfunction。

我尝试用VBA代码replaceSEARCH函数:

Function ProjectSearch(ByVal strProj As String, ByVal strVal As String, _ Optional ByVal delimiter As String = ";") As Boolean Dim i As Long Dim strSplit() As String strSplit = Split(strProj, delimiter) ProjectSearch = False For i = LBound(strSplit) To UBound(strSplit) If strSplit(i) = strVal Then ProjectSearch = True Exit Function End If Next i End Function 

由于我是一个新手它似乎并没有工作。 我的问题是有没有办法在没有VBA的情况下做我想做的事情? 如果我需要使用VBA,我需要做什么?

感谢您提前。

好的,那比我期望的要简单得多:

在这里输入图像说明

=IFERROR(INDEX($C$1:$C$11,SMALL(IF(ISNUMBER(IF(SEARCH(E$15,$D$1:$D$11)=1,SEARCH(E$15,$D$1:$D$11),SEARCH(CONCATENATE("; ",E$15),$D$1:$D$11))),ROW($D$1:$D$11)-ROW(INDEX($D$1:$D$11,1,1))+1),ROW(1:1))),"")

我只将ISNUMBER(SEARCH(B$15,$C$1:$C$11))部分更改为ISNUMBER(IF(SEARCH(E$15,$D$1:$D$11)=1,SEARCH(E$15,$D$1:$D$11),SEARCH(CONCATENATE("; ",E$15),$D$1:$D$11)))

另外IF语句是说如果searchfind单个单词作为单元格中的第一个字符来接受search到数组中,否则search以"; "开头。