VBA 从自动筛选中获取值

VBA Get Values from AutoFilter

假设我有超过 100,000 行的非常大的数据集。在 A 列中,我想找到每个唯一的数字。

我知道这可以使用 .Find 功能和 Collections/Arrays 来完成,但这些似乎需要花费很多时间 - 特别是在 100,000 多行的情况下。

但是,在自动筛选 A 列之后,当我点击向下箭头时,它仅显示唯一变量。是否可以通过这种方式简单地从选择中提取这些值?

'pseudocode
filter.Count
Dim X As Long
For x = 2 to filter.Count
   Cells(x, 14) = filter(x)
Next x

您可以将可见单元格提取到数组中。假设你的总范围(没有过滤器)是 A2:A10000。 运行你的过滤器,那么你可以运行这个宏:

Sub t()
Dim arr() As Variant
arr = Range("A2:A10000").SpecialCells(xlCellTypeVisible)

Dim i As Long
For i = LBound(arr) To UBound(arr)
    Debug.Print (arr(i, 1))
    ' Do things with each entry in array
Next i

End Sub

您可以使用高级过滤器,速度非常快。我尝试了 127k 行,结果是即时的。

    Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("D1"), Unique:=True