通过UDF返回一个数组

时间:2015-07-20 17:55:57

标签: excel excel-vba vba

我有两个宏。其中一个基于范围创建一个数组。第二个将采用该数组,通过它并删除任何重复的条目。然后我希望第二个宏返回一个我可以在第一个宏中继续使用的数组。

这是我到目前为止所尝试的内容:

这是为了得到数组:

Sub array_Test()
Dim array1() As Variant
ReDim array1(1 To 10)
array1 = Range("A1:A10")
GEN_USE_Remove_Duplicates_from_Array (array1)
Dim i As Integer
Debug.Print Join(array1, "/") 'Now that array1 has had duplicates removed, print the remaining numbers.  This is where I don't know what to do
For i = 0 To UBound(array1)
    Range(Cells(i + 1, 2).Value) = array1(i + 1)
Next i
End Sub

这是GEN_USE_Remove_Duplicates ... sub:

Sub GEN_USE_Remove_Duplicates_from_Array(arr As Variant)
Dim Array_1
    Array_1 = arr
Dim Array_2()
Dim Array_toRemove()

Dim dic As New Scripting.Dictionary
Dim arrItem, x As Long
For Each arrItem In Array_1
    If Not dic.Exists(arrItem) Then
        dic.Add arrItem, arrItem
    End If
Next

Array_2 = dic.Keys


Debug.Print Join(Array_2, "/")

GEN_USE_Remove_Duplicates_from_Array = Array_2

End Sub

成功保留唯一值。现在,我如何获得在array_Test子中使用的结果(Array_2)?我是否需要创建一个函数而不是Sub?

非常感谢任何建议/帮助/提示!

1 个答案:

答案 0 :(得分:2)

Sub不会返回值,但您可以轻松地将其交换到将要执行的函数。

function GEN_USE_Remove_Duplicates_from_Array(arr As Variant)
    ' lots of code stuff here ...
    GEN_USE_Remove_Duplicates_from_Array = Array_2
end function

将返回的数组分配给数组,如

array1 = GEN_USE_Remove_Duplicates_from_Array(array1)

fwiw,您应该可以将其保留为子并使用,

arr = array2

这也应该将作为单个参数传入的数组更改为去除数组。