卓越独特的价值观

时间:2011-07-25 13:08:22

标签: excel excel-formula

我在互联网上看到了很多关于这个问题的答案(并且在stackoverflow上)当我尝试每个人似乎都建议的解决方案时,某些东西无效。

基本上我有一个值列表(比如第24行,第C列到第U行),我想在第25行创建一个(范围)公式,它会给我一些值的不同值。范围C24:U24。

我使用了下面的公式

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

它不起作用,只是返回列表中的第一项。

2 个答案:

答案 0 :(得分:3)

您仍然需要在几个单元格中复制粘贴公式。在您的示例中,$B$25将是第一个单元格(因为公式的这一部分:$B$25:B25)。当您向下拖动此公式时,它将检查该值是否已在$B$25:B26中,依此类推。

答案 1 :(得分:2)

我知道你没有要求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

对于那些关心的人:它将单元格值转储到变量数组中,然后用每个单词填充一个字典(空白单元格除外)。由于词典只保留了unqiue键,因此它可以清除欺骗行为。然后我遍历字典并为每个条目创建一个字符串。我在最后清理了额外的分隔符,所以列表很干净。