【问题标题】:Excel Formula - Match substrings of List to ListExcel 公式 - 将列表的子字符串匹配到列表
【发布时间】:2018-12-12 09:46:37
【问题描述】:

我在一个 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

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

我使用matchfind 等公式,也使用wildcards *,但没有得出任何结果。 在 SO 上提出的类似问题涵盖了相反的情况 How to find if substring exists in a list of strings (and return full value in list if so)

如有任何帮助,我们将不胜感激。一个公式会很酷,但使用 vba 也可以。

【问题讨论】:

  • 你尝试过 VBA 吗?
  • 您可以使用find() 工作表函数来确定子字符串(如blueyellow 是否存在于完整字符串中(如1234 blue 6 abcabc yellow 123)。跨度>
  • @Error1004 是的,VBA 可以轻松解决这个问题,我只是想知道公式解决方案会是什么样子。我没有想到 AGGREGATE 函数,因为 user10779473 使用了它。我可以将 VBA 代码作为单独的答案发布。

标签: excel string excel-formula substring match


【解决方案1】:
=INDEX(D$7:D$9, AGGREGATE(15, 7, ROW($1:$3)/ISNUMBER(SEARCH(D$7:D$9, A2)), 1))

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • 这在什么方面不能回答问题?它专门提供了一种解决方案,'需要某种匹配公式来将第二个列表中的正确值分配给第一个',并且提供的图像证明了 OP 的示例数据和预期结果。
  • 留下解释的好处是,如果有人在以后通过谷歌搜索找到答案,他们能够理解逻辑并可以修改公式以满足他们的需求。跨度>
【解决方案2】:

这是一个使用 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

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 2019-05-28
    • 2023-03-28
    • 2021-11-30
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多