我正在尝试 return 我的 Excel UDF 的值数组。我只得到第一个值,没有别的,为什么?
I'm trying to return an array of values for my Excel UDF. I only end up with the first value, and nothing else, why?
我希望我的 UDF 采用列输入和 return 可用作数组公式的字符串数组。该函数使用集合和 Resume next 来构建唯一集合(有效),然后循环遍历并将这些唯一字符串添加到字符串数组(这也有效)。代码如下:
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
中有正确的值。我已经阅读了 "I only have one value in my column" 问题,广泛接受的解决方案是转置它,因此数组输出为列而不是行 - 这修复了它 once。它起作用了,尽管它只列出了 7 个独特的字符串然后重复它们(尽管字符串数组包含 33 个条目),然后当我再次尝试在电子表格上输入公式时它一直没有起作用。
输入是 table 列,因此函数称为 {=FindUniqueValues([table[someColumn])}。
您的代码有效! (粘贴到标准模块中):
我首先高亮了 B1 到 B9。然后在公式栏中点击然后数组输入:
=FindUniqueValues(A1:A9)
数组公式必须用Ctrl + Shift + 输入Enter 而不仅仅是 Enter 键。如果操作正确,公式将在公式栏中显示,并带有花括号。
诀窍是高亮显示 B 单元格,然后输入公式。不要把公式放在单个单元格中,尽量向下复制!
我希望我的 UDF 采用列输入和 return 可用作数组公式的字符串数组。该函数使用集合和 Resume next 来构建唯一集合(有效),然后循环遍历并将这些唯一字符串添加到字符串数组(这也有效)。代码如下:
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
中有正确的值。我已经阅读了 "I only have one value in my column" 问题,广泛接受的解决方案是转置它,因此数组输出为列而不是行 - 这修复了它 once。它起作用了,尽管它只列出了 7 个独特的字符串然后重复它们(尽管字符串数组包含 33 个条目),然后当我再次尝试在电子表格上输入公式时它一直没有起作用。
输入是 table 列,因此函数称为 {=FindUniqueValues([table[someColumn])}。
您的代码有效! (粘贴到标准模块中):
我首先高亮了 B1 到 B9。然后在公式栏中点击然后数组输入:
=FindUniqueValues(A1:A9)
数组公式必须用Ctrl + Shift + 输入Enter 而不仅仅是 Enter 键。如果操作正确,公式将在公式栏中显示,并带有花括号。
诀窍是高亮显示 B 单元格,然后输入公式。不要把公式放在单个单元格中,尽量向下复制!