我正在尝试为Excel UDF返回一个值数组。我只得到第一个值,没有别的,为什么?

时间:2018-01-25 01:48:30

标签: arrays excel vba excel-vba excel-2010

我希望我的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])}。

1 个答案:

答案 0 :(得分:3)

您的代码有效! (将其粘贴在标准模块中)

enter image description here

我首先通过 B9 点亮 B1 。然后单击公式栏然后输入数组:

=FindUniqueValues(A1:A9)
必须使用 Ctrl + Shift + 输入输入

数组公式,而不仅仅是 Enter 键。如果这样做正确,公式将在公式栏中以大括号显示。

诀窍是点亮 B 单元格,然后输入公式。不要将公式放在一个单元格中,并尝试向下复制!