查找包含字符串中子字符串的所有行,并返回ms-excel中所有此类行的第一个单元格

时间:2016-03-07 18:30:09

标签: excel excel-formula

我已对某些ID进行了分类。现在每个id可能属于多个类别。假设列A包含类别名称,列B包含类别包含的所有ID。我添加了包含所有id的列C(单元格中的单个id)。现在我想在D列中包含所有包含该id的类别名称(来自C列)。如果在类别(列A)中找不到该ID,则返回“未找到”。

      A             B         C     D

  category A   a21|b43|g87   a21   category A 

  category B   b43|j78|n99   b43   category A category B

                             c35   not found

我尝试使用Index,Match,iferror,find等但无法实现我的预期目标。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:2)

你有没有尝试过"如果" &安培; "搜索"功能

对于这两个类别并假设您没有标题,您可以使用:

=IF(ISERROR(SEARCH(C1,B$1)),"",A$1) & " " & IF(ISERROR(SEARCH(C1,B$2)),"",A$2)

如果您还有3个类别,则可以在更改B&的行时以相同的方式添加它们(连接)。每个if语句中的A.如果在任何类别中找不到ID,则会产生空白单元格。您可以预先添加另一个if语句以返回" not found"如果需要,或者您可以稍后通过过滤D列中的空白单元格手动完成。

修改 如果您声明(更新)的类别太多,那么最好的选择是使用简短的VBA代码。这个概念很简单:对于您拥有的每个ID,搜索所有可能的类别。两个" for循环"足够了。

Sub FindID()
 lastRowID = Range("C" & Rows.Count).End(xlUp).Row 'Define number of IDs
 lastRowCAT = Range("A" & Rows.Count).End(xlUp).Row 'Define number of CATs

    For i = 2 To lastRowID   'For each ID
        Category = 0         'We reset the category for each ID
        currentID = Range("C" & i).Value 'store the value of the ID

            For j = 2 To lastRowCAT 'Looking the ID in each category
                If InStr(Range("B" & j).Value, currentID) > 0 Then 'If it is found, we add it to cateogries
                   Category = Category & " " & Range("A" & j).Value
                End If
            Next j

            If Category = 0 Then
                Range("D" & i).Value = "not found"
            Else
                Range("D" & i).Value = Right(Category, Len(Category) - 2)
            End If

    Next i

End Sub