在match中返回多个逗号分隔值

时间:2014-09-25 16:16:47

标签: excel excel-formula match

我有以下Excel公式,可以正常工作以返回列中的第一个值,但我希望它以逗号分隔列表的形式返回唯一值列表。

=INDEX('001'!G$12:G$99, MATCH("*", '001'!G$12:G$99, 0))

很明显,我搜索的值列表在表格#001; 001'在G栏中。

我找到了使用分布在多行中的数组公式的解决方案,但是考虑到创建逗号分隔列表的限制,我很难在单个公式中创建解决方案。

2 个答案:

答案 0 :(得分:2)

尝试以下用户定义功能:

Public Function ListUniques(rng As Range) As String
    ListUniques = ""
    Dim c As Collection, r As Range, _
        v As Variant, ky As String
    Set c = New Collection
    On Error Resume Next
    For Each r In rng
        v = r.Value
        If v <> "" Then
            ky = CStr(v)
            c.Add v, ky
            If Err.Number = 0 Then
                ListUniques = ListUniques & "," & v
            Else
                Err.Number = 0
            End If
        End If
    Next r
    ListUniques = Mid(ListUniques, 2)
    On Error GoTo 0
End Function

例如:

UDF


用户定义函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      = ListUniques(G12:G99)

      要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

      有关UDF的详细信息

      必须启用宏才能使其生效!

答案 1 :(得分:0)

另外,您必须确保返回不超过 255 个字符,即Excel限制:

Public Function ListUniques(rng As Range) As String
ListUniques = ""
Dim c As Collection, r As Range, _
    v As Variant, ky As String
Set c = New Collection
On Error Resume Next
For Each r In rng
    v = r.Value
    If v <> "" Then
        ky = CStr(v)
        c.Add v, ky
        If Err.Number = 0 Then
            ListUniques = ListUniques & "," & v
        Else
            Err.Number = 0
        End If
    End If
Next r
ListUniques = Mid(ListUniques, 2, 255)
On Error GoTo 0
End Function