【问题标题】:excel unique values卓越的独特价值
【发布时间】:2011-07-25 13:08:21
【问题描述】:

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

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

我用了下面的公式

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

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

【问题讨论】:

  • 也许是超级用户的问题?
  • 每个单元格中的值是单个字符、字符串、单词还是数字?另外,您是否希望将列表中的每个项目组合成一个字符串,并且您是否希望每个不同元素都有一个分隔符(如逗号分隔)?
  • JMax 下面的答案是正确的(请参阅我对它实际工作方式的最后评论)。 @Tiago,这有点边界,我同意严格来说,excel公式不是编程,你可以这样考虑。无论如何,我使用了准确的标签 excel-formula,我四处搜索,发现这里有很多 excel 问题......所以我得出结论,这适合这里。

标签: excel excel-formula


【解决方案1】:

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

【讨论】:

  • 我不是在拖公式,我是使用ctrl+shift+enter的范围公式..(我的范围其实也是一行,但这无关紧要)
  • 我也尝试将其作为逐个单元格的公式,并将其水平拖动到我的所有行范围内,但它会以 #n/a 的形式返回
  • 可能是excel函数改变了一点结果,我在excelforum.com/excel-worksheet-functions/…尝试了类似的函数,在get-digital-help.com/2009/03/30/…尝试了另一个函数
  • 您必须使用 ctrl+shift+enter 将您的第一个公式验证为数组公式,就像您已经在做的那样。但是,您必须拖动公式(如果需要,水平拖动 :))以获取其他值。我更清楚了吗?
  • 现在我明白了,诀窍是您不要选择整个范围并按 ctrl+shift+enter,而是对第一个单元格执行此操作,就好像它是一个范围一样,然后拖动它。 . 成功了,谢谢
【解决方案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 键,因此它会清除掉骗子。然后我遍历字典并为每个条目创建一个字符串。我在最后清理了多余的分隔符,这样列表就干净了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多