我已对某些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等但无法实现我的预期目标。任何帮助都将非常感激。
答案 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