Уникальные текстовые значения в Excel - PullRequest
0 голосов
/ 21 октября 2018

Я использую формулу Excel для подсчета уникальных текстовых значений:

=SUM(IF(FREQUENCY(COUNTIF(Colors,"<"&Colors),COUNTIF(Colors,"<"&Colors)),1))

Я получил ее от этой статьи SO .

Интересно, возможно лисделать пользовательскую функцию (UDF) для этой формулы ...
Я пробовал некоторые функции, но до сих пор мне не удавалось ...: -)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Я просто хочу добавить, что наткнулся на функцию, касающуюся этого вопроса.Использование коллекции

Это выглядит так:

Function unique_values(rng As Range) As Double 
Dim unique As New
Collection Dim cl As Range Dim i As Integer

Set rng = Selection On Error Resume Next
     For Each cl In rng
         unique.Add cl.Value, CStr(cl.Value)
     Next cl On Error GoTo 0

unique_values = unique.Count

End Function

На всякий случай, если кому-то это интересно.: -)

0 голосов
/ 23 октября 2018

Вы можете использовать Dictionary для отслеживания всего, что поступает из диапазона, а затем просто сбросить ключи словаря обратно в виде строки:

Public Function GetDistinct(inRange As Range)
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    'collect everything into the dictionary
    Dim rngCell As Range
    For Each rngCell In inRange.Cells
        If rngCell.Value <> "" And Not dict.Exists(rngCell.Value) Then
            dict.Add rngCell.Value, 1
        End If
    Next rngCell

    'The keys of a dictionary are an array
    'So we can just Join() them with a ", "
    GetDistinct = Join(dict.Keys, ", ")
End Function

На практике:

enter image description here

...