我希望我的UDF采用列输入并返回一个字符串数组,我可以将其用作数组公式。该函数使用一个集合和Resume旁边构建一个uniques集合(可以工作),然后我遍历这个并将这些唯一的字符串添加到字符串数组(这也有效)。代码如下:
Function FindUniqueValues(columnToCheck As Range) As Variant
'****************************************************************
'** builds a string array of unique values to output somewhere **
'****************************************************************
Dim Col As New Collection
Dim CallerRows As Long
Dim CallerCols As Long
Dim itm
Dim i As Long
Dim CellVal As Variant
Dim stringArray() As String
For i = 1 To columnToCheck.Rows.Count
CellVal = columnToCheck.Rows(i).Value
On Error Resume Next
Col.Add CellVal, Chr(34) & CellVal & Chr(34)
On Error GoTo 0
Next i
ReDim stringArray(1 To Col.Count) As String
i = 1
For Each itm In Col
stringArray(i) = itm
i = i + 1
Next
FindUniqueValues = Application.WorksheetFunction.Transpose(stringArray)
End Function
我已设置调试点,stringArray
中包含正确的值。我已经阅读了“我的列中只有一个值”问题,并且广泛接受的解决方案是将其转置,以便将数组输出为列而非行 - 这将修复为。它工作,虽然只列出7个唯一的字符串,然后重复它们(尽管字符串数组包含33个条目),然后当我尝试再次在电子表格中输入公式时它从未工作过。
输入是一个表列,因此该函数被称为{= FindUniqueValues([table [someColumn])}。