查找包含string中子string的所有行,并返回ms-excel中所有这些行的第一个单元格

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

ABCD category A a21|b43|g87 a21 category A category B b43|j78|n99 b43 category A category B c35 not found 

我曾尝试使用索引,匹配,iferror,find等,但无法实现我的预期目标。 任何帮助将非常感激。

你是否尝试过“如果”和“search”function的组合?

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

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

如果还有3个类别,则可以按照相同的方式(连接)添加它们,同时更改每个if语句中B&A的行。 如果在任何类别中找不到该ID,则会导致空白单元格。 如果需要,您可以预先添加另一个if语句以返回“未find”,或者您可以稍后通过过滤D列中的空白单元格来执行此操作。

编辑:如果你有太多的类别陈述(更新),那么最好的select是使用一个简短的VBA代码。 这个概念很简单:对于每个ID,search所有可能的类别。 两个“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