2011-07-25 173 views
0

我在互联网上看到了很多关于这个问题的答案(以及在stackoverflow上),当我尝试每个人都似乎建议的解决方案时,有些东西不起作用。excel独特的价值

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

我用下面

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

公式它不工作,它只是返回列表的第一个项目。

+1

也许是超级用户的问题? –

+1

每个单元格中的值是单个字符,字符串,单词还是数字?另外,是否希望列表中的每个项目都合并为一个字符串,并且是否要为每个不同的元素使用分隔符(如逗号分隔)? – aevanko

+0

这个公式适用于我,当它作为数组公式输入时,然后拖到第25行。如果行24中没有其他唯一值,它将返回“#N/A”。 – Excellll

回答

3

您仍然需要在几个单元格中复制粘贴公式。在你的例子中,$B$25将是第一个单元格(因为这部分公式:$B$25:B25)。当你拖动这个公式时,它会检查这个值是否已经在$B$25:B26等等。

+0

我不是在拖动公式,我正在使用ctrl + shift + enter使用范围公式(也是我的范围实际上是一行,但这是无关紧要的) – Charbel

+0

我也尝试将它作为单元格公式,并在我的所有行范围内水平拖动它,但是它会返回#n/a – Charbel

+0

是否可能是因为excel函数改变了一些结果,我在http://www.excelforum中尝试了类似的功能。 com/excel-worksheet-functions/363302-howto-select-distinct-values-from-list.html和http://www.get-digital-help.com/2009/03/30/how-to-提取一个独特的列表和重复的excel从一列/ – Charbel

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 

对于那些谁关心:它转储单元值成变量数组,然后填充用每一个(除了空白单元格)的字典。由于字典只有独特的钥匙,因此它会清除欺骗。然后我遍历字典并为每个条目创建一个字符串。我最后清理了额外的分隔符,所以清单很干净。