据我所知,没有内置功能可以解析和汇总Excel中逗号分隔的标签。当然,您可以使用工作表功能和少许VBA创建自己的解决方案。这是执行此操作的快速解决方案。
步骤1:按Alt+ F11在Excel中打开VBA编辑器窗格。插入一个新模块,并在此代码中粘贴自定义功能。
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
此功能将允许您创建以逗号分隔的列表,以汇总您拥有的标签数据。
第2步:在工作表中,在单元格(在下面的示例中为H2)中输入要搜索的标签。在右侧的单元格中,按Ctrl+ Shift+ 输入以下公式Enter。
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
通过按Ctrl+ Shift+ Enter,您正在输入公式作为数组公式。它将{...}
在编辑栏中显示为。请注意,公式$B$2:$B$6
中的范围是,其中包含列出的项目的所有标签$A$2:$A$6
。
编辑:
如果您不介意在一个单元格中的列而不是列表中列出匹配项,则可以仅使用工作表函数返回标签的匹配项。
您的标题在的位置Column A
,标签在的位置Column B
,而您要搜索的标签在的位置H2
,您可以在其中使用以下数组公式,I2
并根据需要填写以下内容:
=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
该公式的工作原理是首先根据每行中的标签是否包含搜索词来形成一个数字数组。如果找到匹配项,则行号存储在数组中。如果未找到,则将2000000存储在数组中。接下来,SMALL(<array>,ROW()-1)
公式的一部分返回ROW()-1
数组中的第th个最小值。接下来,将此值作为索引参数传递给INDEX()
函数,在此返回标题数组中该索引处的值。如果将大于标题数组中的行数的数字INDEX()
作为参数传递给它,则返回错误。由于找不到匹配项时将2000000作为参数传递,因此将返回错误。IFERROR()
然后,""
在这种情况下该函数返回。
掌握ROW()
此公式的用法很重要。如果要显示从另一行开始的结果列表,则需要调整SMALL()
函数的第二个参数,以使其返回数组中的第一个最小值。例如,如果结果列表从第1行而不是第2行开始,则应使用SMALL(...,ROW())
代替SMALL(...,ROW()-1)
。
另外,如果标题和标签的列表不是从第1行开始的,则还需要调整公式。IF()
必须调整函数的第二个参数,以便数据第一行中的匹配项返回1。例如,如果标题列表从第2行而不是第1行开始,则需要包含IF(...,ROW($A$2:$A$7)-1,...)
而不是的公式IF(...,ROW($A$1:$A$6),...)
。