Подсчет уникальных значений в массиве VBA с пользовательскими функциями

у меня есть функция VBA, которая проходит через несколько пользовательских диапазонов на основе пользовательских условий и добавляет элементы в массив. Для своих конструированных случаев пользы оно почти уверенно добавит дубликаты. В конце концов, меня интересует только количество уникальных элементов в массиве, я построил.

Я пытаюсь вызвать эту функцию:

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

вот так:

Function Stuff(parameters)

Dim myArray() as Variant

...do things to populate myArray, finally

Stuff = GetUniqueCount(myArray)

функция GetUniqueCount - это очень слегка измененная настройка принятого ответа здесь на подобный вопрос.

когда я это делаю, материал всегда возвращается 1, даже если кажется очевидным, что этого не должно быть. Я тестировал материал до этого момента, и он точно производит количество ожидаемых элементов, я просто делаю что-то неправильно, когда пытаюсь подсчитать количество тех элементов, которые уникальны. Любая помощь будет оценили, так как я еще учусь массивы VBA.

27
задан Community
27.03.2023 17:02 Количество просмотров материала 2562
Распечатать страницу

1 ответ

Я сделал несколько небольших изменений в UDF ()..............изучите отличия:

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

enter image description here

1
отвечен Gary's Student 2023-03-29 00:50

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх