excel - 通过自动过滤器删除需要太长时间

标签 excel vba

我有大约 8000 多行。使用自动筛选器删除行需要几分钟的时间。我认为自动过滤器是事实上的快速删除方式(而不是逐行循环)。我怎样才能加快速度?有更快的方法吗?公平地说,一半的行被删除了 XD

With ThisWorkbook.Worksheets("Upload")
    lastRow = .Cells(.Rows.Count, "S").End(xlUp).Row
    Set dataRng = .Range(.Cells(4, 1), .Cells(lastRow, 19))
    dataRng.AutoFilter field:=19, Criteria1:="=0"
    Application.DisplayAlerts = False
    dataRng.Offset(1, 0).Resize(dataRng.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows.Delete
    Application.DisplayAlerts = True
    .ShowAllData
End With

最佳答案

我将挑战自动筛选是最快方法的基本假设 - 通常很难在变体数组上击败循环

这个演示展示了一种方法,在我的系统上处理 8000 多行,在亚秒内删除一半运行

Sub DEMO()
    Dim datrng As Range
    Dim dat, newdat
    Dim i As Long, j As Long, k As Long
    With ThisWorkbook.Worksheets("Upload")
        Set datrng = .Range(.Cells(1, 1), .Cells(.Rows.Count, "S").End(xlUp))
    End With
    dat = datrng.Value
    ReDim newdat(1 To UBound(dat, 1), 1 To UBound(dat, 2))
    j = 1
    For i = 1 To UBound(dat, 1)
        If dat(i, 19) <> 0 Then ' test for items you want to keep
            For k = 1 To UBound(dat, 2)
                newdat(j, k) = dat(i, k)
            Next
            j = j + 1
        End If
    Next

    datrng = newdat
End Sub

关于excel - 通过自动过滤器删除需要太长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34028430/

相关文章:

python - 在python中从n个csv文件创建excel文件

excel - Windows 重新镜像后对象 'createpivottable' 的方法 'pivotcache' 失败

vba - 填充字典导致错误

excel - 图表对象删除错误

algorithm - 这个 SuperFashHash 实现是否计算字符串的正确 31 位散列?

excel - 让 Excel VBA 等待外部工作簿链接刷新后再继续

c# - 如何使用 C# 和 Interop 在 Excel 中设置锁定的单元格保护选项?

excel - VBA 按用户范围选择排序

excel - 将 Excel 按位函数(BITAND 或 BITOR)应用于具有较大值的范围

php - Laravel-Excel 导出的 Excel 工作表不会将列中的日期值转换为日期