【问题标题】:Use VBA to get Unique values for use within VBA?使用 VBA 获取唯一值以在 VBA 中使用?
【发布时间】:2013-04-03 22:13:26
【问题描述】:

我目前会在 Range、Cells 或类似的许多不同方式中使用类似的东西,它们的基本原理相同。

Range("A1", Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("IV1"), Unique:=True

Dim myArr as Variant 
myArr = Range("IV1", Range("IV1").End(xlDown))
Columns("IV").Delete

有没有办法将这些唯一值直接加载到 VBA 中的任何类型的对象中,而无需复制到另一个位置?

【问题讨论】:

  • 类似:stackoverflow.com/questions/3017852/…IMO 最好的方法是使用字典。
  • 与此无关。那是关于使用 VBA 构建的数组,我的是将唯一列表从列中获取到数组中。
  • @bernie:抱歉刚刚看到你的评论。已删除我的答案:)
  • @SiddharthRout:不需要删除!请取消删除您的答案。我相信这是一个很好的答案。
  • 非常感谢,我给了你一票。

标签: arrays vba excel unique


【解决方案1】:

您可以使用Collection Object 创建唯一条目。例如

Sub Sample()
    Dim Col As New Collection
    Dim itm
    Dim i As Long
    Dim CellVal As Variant

    '~~> Lets say looping through Row 1 to 22 For 
    '~~> Range("A1:A22") as mentioned in your recent comment
    For i = 1 To 22
        CellVal = Sheets("Sheet1").Range("A" & i).Value
        On Error Resume Next
        Col.Add CellVal, Chr(34) & CellVal & Chr(34)
        On Error GoTo 0
    Next i

    For Each itm In Col
        Debug.Print itm
    Next
End Sub

屏幕截图

【讨论】:

  • 那么,如果同一个值被添加两次,一个集合会抛出错误?
  • 不,因为我们使用的是 OERN,所以不会
  • 但是集合仍然抛出错误,您只是在处理它。
  • 好的,我接受了这个作为答案,但我更愿意解释或指出正确的方向,而不是一段代码,没有描述它如何工作或为什么工作。当我询问错误处理以及它为什么起作用时,我只是得到了它确实起作用的响应。这不是这个网站的目的,不是要求答案并得到答案,而是学习。所以对于未来的任何人。 Collection 变量仅适用于 2 个条件。一是您将键与您添加的值相关联,二是忽略在复制键时告诉您的错误。
  • @user2140261:我现在刚刚重新阅读了 cmets。我看到评论被编辑为But the collection is still throwing an error you are simply handling it. 如果我看到了新评论,那么我肯定会解释它。您在上一条关于学习的评论中所说的是非常真实的:)对于错过该评论表示歉意。
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多