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
假设我有超过 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