fin*_*dow 5 excel vba excel-vba
我有大约8000多行.使用自动过滤器删除行需要几分钟.我认为autofilter是事实上快速删除的方式(而不是逐行循环).我怎样才能加快速度?有更快的方法吗?公平地说,一半的行被删除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
Run Code Online (Sandbox Code Playgroud)
我将挑战潜在的假设,即AutoFilter是快速前进的方法 - 通常很难在变量数组上击败循环
这个演示展示了一种方法,在我的系统上处理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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
684 次 |
最近记录: |