我使用以下函数来获取数组中的唯一值。但是,在第二行中,UniqueArray(i)= TempArray(i),它将再次调用函数本身,而不是分配数组值。 感谢您的帮助。
Function UniqueArray(MyArray) As Variant
Dim TempArray As Variant
ReDim TempArray(0)
TempArray(0) = MyArray(LBound(MyArray))
For i = LBound(MyArray) To UBound(MyArray)
If Not IsInArray(TempArray, MyArray(i)) Then
ReDim Preserve TempArray(UBound(TempArray) + 1)
TempArray(UBound(TempArray)) = MyArray(i)
End If
Next i
ReDim MyArray(UBound(TempArray))
For i = LBound(TempArray) To UBound(TempArray)
UniqueArray(i) = TempArray(i)
Next i
End Function
答案 0 :(得分:1)
将TempArray数组作为一个整体传递回来。您不需要依靠“帮助器”功能来确定Excel的唯一性。应用程序具有多个选项。
Sub main()
Dim arr As Variant
arr = Array(1, 2, 2, 3, 4, 5, 5)
Debug.Print Join(arr, ",") '1,2,2,3,4,5,5
arr = UniqueArray(arr)
Debug.Print Join(arr, ",") '1,2,3,4,5
End Sub
Function UniqueArray(MyArray) As Variant
Dim i As Long, TempArray As Variant
ReDim TempArray(0)
TempArray(0) = MyArray(LBound(MyArray))
For i = LBound(MyArray) + 1 To UBound(MyArray)
If IsError(Application.Match(MyArray(i), TempArray, 0)) Then
ReDim Preserve TempArray(UBound(TempArray) + 1)
TempArray(UBound(TempArray)) = MyArray(i)
End If
Next i
UniqueArray = TempArray
End Function
如果要在Excel之外使用该函数,则您可能希望保留IsInArray随行函数。
答案 1 :(得分:-1)
我相信您需要重新设置 UniqueArray 而不是 MyArray ,因为 MyArray 是该函数的输入。由于您尚未将其声明为数组。