превосходить уникальные ценности

Я видел много ответов на эти вопросы в Интернете (и в stackoverflow): что-то не работает, когда я пробую решение, которое, кажется, предлагают все.

В основном у меня есть список значений (скажем, в строке 24, столбец от C до U), и я хотел бы создать формулу (диапазона) в строке 25, которая дала бы мне различные значения значений в диапазоне C24: U24.

Я использовал формулу ниже

=INDEX($C$24:$U24,MATCH(0,COUNTIF($B$25:B25,$C$24:$U$24),0))

Он не работает, он просто возвращает 1-й элемент списка.


person Charbel    schedule 25.07.2011    source источник
comment
Может вопрос к суперпользователю?   -  person Tiago Cardoso    schedule 25.07.2011
comment
Являются ли значения в каждой ячейке одним символом, строкой, словом или числом? Кроме того, хотите ли вы, чтобы каждый элемент в списке был объединен в одну строку, и вам нужен разделитель для каждого отдельного элемента (например, через запятую)?   -  person aevanko    schedule 25.07.2011
comment
Эта формула сработала для меня, когда она была введена как формула массива, а затем перетащена через строку 25. Она вернет # N / A, если в строке 24 не останется других уникальных значений.   -  person Excellll    schedule 25.07.2011
comment
Ответ JMax, приведенный ниже, является правильным (см. Мой последний комментарий о том, как это на самом деле работает). @Tiago, это немного погранично, я согласен, что формулы Excel, строго говоря, не являются программированием, вы можете считать их такими. В любом случае я использовал точный тег excel-formula, и я поискал и нашел здесь множество вопросов excel ... так что я пришел к выводу, что это подходит здесь нормально.   -  person Charbel    schedule 25.07.2011


Ответы (2)


Вам все равно придется скопировать и вставить формулу в несколько ячеек. В вашем примере $B$25 будет первой ячейкой (из-за этой части формулы: $B$25:B25). Когда вы перетаскиваете эту формулу вниз, она проверяет, находится ли значение уже в $B$25:B26 и так далее.

person JMax    schedule 25.07.2011
comment
Я не перетаскиваю формулу, я использую формулу диапазона, используя ctrl + shift + enter .. (также мой диапазон на самом деле является строкой, но это не имеет значения) - person Charbel; 25.07.2011
comment
также я попытался сделать это как ячейку по формуле ячейки и перетащить ее по горизонтали по всему моему диапазону строк, но он возвращается с # n / a - person Charbel; 25.07.2011
comment
может быть, функции excel немного изменились, испортив результаты, я попробовал аналогичную функцию в excelforum.com/excel-worksheet-functions/ и еще один в get-digital-help.com/ 30 марта 2009 г. - person Charbel; 25.07.2011
comment
Вы должны подтвердить свою первую формулу как формулу массива с помощью ctrl + shift + enter, как вы уже делаете. Но затем вы должны перетащить формулу (при необходимости по горизонтали :)), чтобы получить другие значения. Я понятнее? - person JMax; 25.07.2011
comment
теперь я понял, трюк в том, что вы не выбираете весь диапазон и ctrl + shift + enter, но вы делаете это для первой ячейки, как если бы это был диапазон, а затем перетаскиваете его .. это сработало, спасибо - person Charbel; 25.07.2011

Я знаю, что вы не запрашивали функцию VBA, но на случай, если некоторые читатели захотят узнать, как это сделать через VBA, вот функция. Он берет диапазон ячеек и создает строку только из уникальных элементов. Вы также можете добавить разделитель (например, если вы хотите, чтобы они были разделены запятыми).

Function UniqueList(ByVal cell_range As range, _
                    Optional ByVal seperator As String = "") As String

Dim vArray As Variant
Dim result As String
Dim i As Long, j As Long
Dim v As Variant
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")

vArray = cell_range.Value

For i = 1 To UBound(vArray, 1)
    For j = 1 To UBound(vArray, 2)
        If Len(vArray(i, j)) <> 0 Then
            dictionary(vArray(i, j)) = 1
        End If
    Next
Next

For Each v In dictionary
    result = result & (seperator & v)
Next

If Len(result) <> 0 Then
    result = Right$(result, Len(result) - Len(seperator))
End If

UniqueList = result

End Function

Для тех, кому не все равно: он выгружает значения ячеек в вариантный массив, а затем заполняет словарь каждым из них (кроме пустых ячеек). Поскольку словари содержат только уникальные ключи, он отсеивает дубликаты. Затем я просматриваю словарь и создаю строку с каждой записью. Я убираю лишний разделитель в конце, чтобы список был чистым.

person aevanko    schedule 26.07.2011