我有两个宏。其中一个基于范围创建一个数组。第二个将采用该数组,通过它并删除任何重复的条目。然后我希望第二个宏返回一个我可以在第一个宏中继续使用的数组。
这是我到目前为止所尝试的内容:
这是为了得到数组:
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?
非常感谢任何建议/帮助/提示!
答案 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
这也应该将作为单个参数传入的数组更改为去除数组。