我有以下Excel公式,可以正常工作以返回列中的第一个值,但我希望它以逗号分隔列表的形式返回唯一值列表。
=INDEX('001'!G$12:G$99, MATCH("*", '001'!G$12:G$99, 0))
很明显,我搜索的值列表在表格#001; 001'在G栏中。
我找到了使用分布在多行中的数组公式的解决方案,但是考虑到创建逗号分隔列表的限制,我很难在单个公式中创建解决方案。
答案 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将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除UDF:
从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