Zliczanie unikalnych wartości w tablicy VBA z funkcjami zdefiniowanymi przez użytkownika


0

Mam funkcję VBA, która przechodzi przez kilka zakresów podanych przez użytkownika na podstawie warunków podanych przez użytkownika i dodaje elementy do tablicy. W przypadku zaprojektowanych przypadków użycia prawie na pewno doda duplikaty. Na koniec interesuje mnie tylko liczba unikalnych przedmiotów w zestawie, który zbudowałem.

Próbuję wywołać tę funkcję:

Function GetUniqueCount(aFirstArray As Variant)

Dim arr As New Collection, a
Dim i As Long

On Error Resume Next

For Each a In aFirstArray
    arr.Add a, Str(a)
Next

GetUniqueCount = arr.Count

End Function

Tak jak:

Function Stuff(parameters)

Dim myArray() as Variant

...do things to populate myArray, finally

Stuff = GetUniqueCount(myArray)

Funkcja GetUniqueCount jest bardzo lekko zmodyfikowaną poprawką przyjętej tutaj odpowiedzi na podobne pytanie.

Kiedy to robię, Rzeczy zawsze zwracają 1, nawet jeśli wydaje się oczywiste, że nie powinno. Testowałem Stuff do tego momentu i dokładnie produkuje liczbę oczekiwanych elementów, po prostu robię coś złego, gdy próbuję policzyć liczbę tych elementów, które są unikalne. Każda pomoc byłaby mile widziana, ponieważ wciąż mam problemy z tablicami VBA.

Odpowiedzi:


1

Wprowadziłem kilka drobnych zmian w UDF () .............. badaj różnice:

Function GetUniqueCount(aFirstArray()) As Long
    Dim arr As Collection
    Set arr = New Collection

    On Error Resume Next
        For Each a In aFirstArray
            arr.Add a, CStr(a)
        Next
    On Error GoTo 0
    GetUniqueCount = arr.Count
End Function

Sub MAIN()
    Dim inpt()
    inpt = Array("alpha", "alpha", "beta", "beta", "gamma")
    MsgBox GetUniqueCount(inpt)
End Sub

wprowadź opis zdjęcia tutaj


Dziękuję Ci. Zmodernizowałem mój projekt, aby był nieco prostszy, a także uwzględniłem to, co tu zaoferowałeś, prowadząc do prawidłowej odpowiedzi.
Joe
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.