查找多个值并返回单个string

我已经find了如何查找多个值并将它们作为列表返回(一个单元格中的一个值)。 但我需要显示在一个单元格中find的列表(作为一个string与断线); 优选在每个值之后用分号分隔。

例如:

来源列表(一个值 – 一个单元格):

A A B B B C 

结果(显示在单个单元格中):

 A; B; C; 

谢谢!

你需要提取唯一的值,然后连接这些值。

a2:a7 = {a, a, b, b, b, c} ,在b2 ctrl + shift + enter并按ctrl + shift + enter

 =IFERROR(INDEX($A$2:$A$7,MATCH(SUM(COUNTIF(B$1:B1,$A$2:$A$7)),COUNTIF($A$2:$A$7,"<"&$A$2:$A$7),0)),"") 

然后复制b2并将其粘贴到b3:b7 。 现在你有一个唯一值的列表。 这个方法是从这个答案 。

现在你已经有了名单,你只需要join他们。 在c2

 =IF(B2="", "", B2&";"&CHAR(10)) &IF(B3="", "", B3&";"&CHAR(10)) &IF(B4="", "", B4&";"&CHAR(10)) &IF(B5="", "", B5&";"&CHAR(10)) &IF(B6="", "", B6&";"&CHAR(10)) &IF(B7="", "", B7&";"&CHAR(10)) 

看到图片。

在这里输入图像说明

我知道这是溃败的。 但在Excel中没有内置的公式。 没有VBA的其他解决方法是在这里和那里 ,以防万一。

顺便说一下,Google电子表格将所有这些内容作为内置函数提供。 只有一条线

 =join(";"&char(10), filter(unique(A2:A7), not(isblank(unique(A2:A7)))))&";" 

在用户定义的函数(aka UDF)中使用静态字典对象并覆盖任何重复项。

 Option Explicit Function udfUniqueList(str As String, _ delim As String, _ Optional cs As Boolean = False) Dim a As Long, arr As Variant Static dict As Object If dict Is Nothing Then Set dict = CreateObject("Scripting.Dictionary") End If dict.RemoveAll dict.CompareMode = IIf(cs, vbBinaryCompare, vbTextCompare) arr = Split(str, Chr(10)) For a = LBound(arr) To UBound(arr) dict.Item(arr(a)) = a Next a udfUniqueList = Join(dict.keys, delim) & delim End Function 

一个静态对象最适合于将被复制到长列中的函数,因为该对象不必被重新创build以供重复使用。

在这里输入图像说明

请记住在目标单元格中​​打开“换行文字”。