【问题标题】:excel search for a string in a table and return string if trueexcel在表格中搜索字符串,如果为真则返回字符串
【发布时间】:2013-11-07 14:48:55
【问题描述】:

A 列包含不同的文本 - 大约 1000 个条目,但相同的文本将出现在不同的单元格中。

在第二个单独的列(G 列)= 一个单独的表格中,每个单元格包含多个设置文本字符串之一(每个可以是 2 到 5 个字符长)。总共大约 20 个。

我想在 A 列中每个单元格的开头搜索 G 列中的每个文本字符串,如果存在(比如 G3 的内容),我希望 G3 的内容显示在 B 列中与匹配的同一行中来自 A 列的单元格。

要匹配的文本同时包含 ASC 和 SC 以及在 * 上的进一步单个字符匹配(尽管我可以排除 * 如果这给出更简单的结果),问题变得复杂。

例子

A 列包含
ASC1 HHHH…………
ASC2 III.......
ASC2 AAAA.......
SC2 JJJJ....
试验孔........
试验孔......
OP1 MMMM ...
ASC1复杂
KAN1
PS禁令
*TTC Jiokl jj

G 列
ASC1
ASC2
*
OP1
附言
SC2
试用
验证

所以 B 列应该显示
ASC1
ASC2
ASC2
SC2
试用
试用
OP1
ASC1
0(或其他一些错误/省略值)
附言
*

(如何)可以做到这一点?我试图从互联网上调整各种解决方案但失败了。

非常感谢 戴夫T

【问题讨论】:

    标签: string excel text matching


    【解决方案1】:

    假设 G2:G20 包含搜索字符串 - 如果您可以按长度顺序列出它们(最短的在前),那么根据您的示例值,列表将以开头

    * 附言 OP1 SC2 ASC1 ASC2 审判 验证

    然后在B2中使用这个公式复制下来

    =LOOKUP(2^15,FIND(G$2:G$20,A2),G$2:G$20)

    G2:G20 应完全填充或调整使用的范围 - 匹配区分大小写,如果没有匹配则返回 #N/A

    如果您想在 G2:G20 中允许空白,请使用此版本

    =LOOKUP(2^15,FIND(G$2:G$20,A2)/(G$2:G$20<>""),G$2:G$20)

    【讨论】:

    • 哦,这比我的要简单得多。哈哈哈很好,巴里。
    • 这会处理返回的错误:=IF(ISERROR(LOOKUP(2^15,FIND($G$1:$G$5,A1),$G$1:$G$5)), "", LOOKUP(2^15,FIND($G$1:$G$5,A1),$G$1:$G$5))
    • 感谢 rwking - 我从问题中认为,当没有匹配项时,错误是可以接受的。在 Excel 2007 或更高版本中,您可以像这样使用 IFERROR:=IFERROR(LOOKUP(2^15,FIND(G$2:G$20,A2),G$2:G$20),"no match")
    • 使用 OP 提供的样本,这将为我返回全 0,
    • 正如我在回答中指出的那样,搜索词列表(在 G 列中)不应包含任何空格,因此如果您只使用 G2:G9 中列出的 8 个搜索项,则需要将公式=LOOKUP(2^15,FIND(G$2:G$9,A2),G$2:G$9)....或者如果您使用此版本=LOOKUP(2^15,FIND(G$2:G$20,A2)/(G$2:G$20<>""),G$2:G$20),您可以在 G2:G20 中有空格 - 我会更新我的答案.....
    【解决方案2】:

    如果您在 G 列中每个字符串的末尾放置一个星号,则此方法有效。星号是一个通配符,它​​允许 MATCH() 函数根据字符串以及后面可能出现的任意数量的字符进行搜索。

    将其粘贴到单元格 B1。

    =IF(ISNA(MATCH($G$1,A1,FALSE)),"",LEFT($G$1,SEARCH("*",$G$1,1)))&IF(ISNA(MATCH($G$2,A1,FALSE)),"",LEFT($G$2,SEARCH("*",$G$2,1)))&IF(ISNA(MATCH($G$3,A1,FALSE)),"",LEFT($G$3,SEARCH("*",$G$1,1)))&IF(ISNA(MATCH($G$4,A1,FALSE)),"",LEFT($G$4, SEARCH("*",$G$1,1)))&IF(ISNA(MATCH($G$5,A1,FALSE)),"",LEFT($G$5, SEARCH("*", $G$5,1)))
    

    您必须重复 "&IF(ISNA(MATCH($G$5,A1, FALSE)), "", LEFT($G$5,SEARCH("*",$G$5,1))) " 列 G 中每个单元格的部分,其中您有一个要搜索的字符串。

    然后双击单元格右下角的十字准线将 B1 中的公式一直向下复制。

    如果不匹配,这将不会在单元格中放置任何内容。它也不区分大小写,但我会第一个承认,如果您的数据是全部大写的,那么请选择上面的答案。它更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多