我想要做什么。
我有两个工作表“仪表板”和“临时计算”。我试图根据每个工作表中的两个不同条件删除行。
仪表板- 如果列号 15 <> 处于活动状态,则删除行
如果列号 10 <> E&D,ESG,PLM SER,VPD,PLM Prod,则删除行。
Temp calc = 如果第 6 列为空,则删除行
如果列号 3n1 删除行,其中 n1 和 n2 是从仪表板中的范围(“n1”和“n2”)获取的日期。
我已经尝试过。
- 使用 for 循环
- 使用过滤器
- 数组(我无法使用数组实际执行此操作
我的问题
这些方法非常慢,我的数据约为 1,68,000(每周增长)。所以我正在寻找我尝试过的替代方法。基本上可以快速做到这一点的东西。
我尝试过的代码。 以下代码有效,但根据数据最多需要 6-10 分钟
Worksheets("Dashboard").Activate
Range("A4").Select
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For x = lastrow To 4 Step -1
If Cells(x, 15).Value <> "Active" Or (Cells(x, 10).Value <> "E&D" And Cells(x, 10).Value <> "ESG" _
And Cells(x, 10).Value <> "PLM SER" And Cells(x, 10).Value <> "VPD" And Cells(x, 10).Value <> "PLM PROD") Then
Rows(x).Delete
End If
Next x
下面的代码使用自动过滤方法。问题是过滤后留下的数据不在我的比较范围内(即如果我的 n1 = 2013 年 1 月 1 日和 n2 = 2013 年 1 月 30 日。过滤器仍然会留下不在我比较范围内的数据n1 和 n2 范围。
Set ws = ThisWorkbook.Worksheets("Temp Calc")
'~~> Start Date and End Date
Sheets("Dashboard").Select
N1 = Range("n1").Value
N2 = Range("n2").Value
Sheets("Temp Calc").Select
With ws
'~~> Remove any filters
.AutoFilterMode = False
'~~> Get the last row
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Identify your data range
Set FltrRng = .Range("A1:F" & lRow)
'~~> Filter the data as per your criteria
With FltrRng
'~~> First filter on blanks
.AutoFilter Field:=6, Criteria1:="="
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'~~> Delete the filtered blank rows
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ws.ShowAllData
'~~> Next filter on Start Date
.AutoFilter Field:=3, Criteria1:="<" & N1, Operator:=xlAnd
'~~> Finally filter on End Date
.AutoFilter Field:=4, Criteria1:=">" & N2, Operator:=xlAnd
'~~> Filter on col 6 for CNF
'.AutoFilter Field:=6, Criteria1:="CNF"
'~~> Delete the filtered rows
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
'~~> Remove any filters
.AutoFilterMode = False
End With
如果问题不充分,请致歉。非常感谢任何可以加快我正在尝试做的事情的替代方案。