Excel公式-将列表的子字符串匹配到列表

时间:2018-12-12 09:46:37

标签: excel string excel-formula substring match

我在一个Excel电子表格中有两个列表。

第一个列表包含诸如以下的字符串

1234 blue 6 abc
xyz blue/white 1234
abc yellow 123

另一个列表包含第一个列表的子字符串

yellow
blue/white
blue

结果

1234 blue 6 abc         blue
xyz blue/white 1234     blue/white
abc yellow 123          yellow

现在,我需要某种匹配公式,将第二个列表中的正确值分配给第一个列表。问题是,没有确定颜色子字符串放置位置的特定模式。另一个问题是,值不是完全唯一的。如我上面的示例所示,查找需要按顺序进行(在检查“蓝色”之前先检查“蓝色/白色”)。

我也使用match处理findwildcards *之类的公式,但没有得到任何结果。 关于SO的一个类似问题涵盖了相反的情况How to find if substring exists in a list of strings (and return full value in list if so)

将寻求任何帮助。公式很酷,但是使用vba也可以。

2 个答案:

答案 0 :(得分:2)

=INDEX(D$7:D$9, AGGREGATE(15, 7, ROW($1:$3)/ISNUMBER(SEARCH(D$7:D$9, A2)), 1))

enter image description here

答案 1 :(得分:0)

这是VBA的解决方案

  • 列表1(字符串)在A列中
  • 列表2(子字符串)在C列中

代码基本上包含嵌套的while循环,用于检查子字符串是否在字符串内部。

row_1 = 1
While .Cells(row_1, "A") <> ""
    row_2 = 1
    While .Cells(row_2, "C") <> ""
        color = .Cells(row_2, "C").Value
        If InStr(1, .Cells(row_1, "A"), color, vbBinaryCompare) > 0 Then
            .Cells(row_1, "B") = color
        End If       
        row_2 = row_2 + 1
    Wend
    row_1 = row_1 + 1       
Wend