优化excel vba中删除行的时间
我想删除一些行-1000/10000基于一个条件,但它需要太长的时间。我还尝试了互联网上所有可用的解决方案,如过滤数据、优化excel vba中删除行的时间,excel,vba,Excel,Vba,我想删除一些行-1000/10000基于一个条件,但它需要太长的时间。我还尝试了互联网上所有可用的解决方案,如过滤数据、Application.screenupdate=False、设置计时器等 Private Sub Remove_incomplete_records_Click() Dim n, count As Integer Dim i As Long Dim lastrownum As Integer lastrownum = Sheets("Master_Data").Cells(
Application.screenupdate=False
、设置计时器等
Private Sub Remove_incomplete_records_Click()
Dim n, count As Integer
Dim i As Long
Dim lastrownum As Integer
lastrownum = Sheets("Master_Data").Cells(Rows.count, 1).End(xlUp).Row
Dim varCalcmode
Do While (lastrownum)
Application.ScreenUpdating = False
'for NB,FO etc if field your refernence is not present then delete the entire row.
For i = 2 To lastrownum
If (Sheets("Master_Data").Cells(i, 2).Value <> "YC" And Sheets("Master_Data").Cells(i, 2).Value <> "YK" And Sheets("Master_Data").Cells(i, 2).Value <> "MK" And Cells(i, 2).Value <> "WK" And Sheets("Master_Data").Cells(i, 2).Value <> "AN") Then
If (Sheets("Master_Data").Cells(i, 4).Value = "") Then
On Error Resume Next
Sheets("Master_Data").Rows(i).EntireRow.Delete Shift:=xlUp
varCalcmode = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Else
End If
Else
End If
Next i
Loop
Application.Calculation = varCalcmode
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Private Sub Remove\u complete\u records\u Click()
Dim n,计数为整数
我想我会坚持多久
将lastrownum设置为整数
lastrownum=工作表(“主数据”)。单元格(Rows.count,1)。结束(xlUp)。行
Dim可变电容模式
执行时(lastrownum)
Application.ScreenUpdating=False
'对于NB、FO等字段,如果您的引用不存在,则删除整行。
对于i=2到lastrownum
如果(表(“主数据”).单元格(i,2).值“YC”和表(“主数据”).单元格(i,2).值“YK”和表(“主数据”).单元格(i,2).值“MK”和单元格(i,2).值“WK”和表(“主数据”).单元格(i,2).值“AN”),则
如果(表(“主数据”)单元格(i,4).Value=“”),则
出错时继续下一步
图纸(“主数据”)。行(i)。EntireRow.Delete Shift:=xlUp
varCalcmode=Application.Calculation
Application.Calculation=xlCalculationManual
Application.ScreenUpdating=False
其他的
如果结束
其他的
如果结束
接下来我
环
Application.Calculation=varCalcmode
Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头
请建议执行此操作的更快方法。尝试一下。它不是逐个删除行,而是查找符合删除条件的每一行,并一次性删除它们。效率更高
Private Sub Remove\u complete\u records\u Click()
Dim i和LastRowNum一样长
Dim DeleteRng As范围
Dim varCalcmode作为XLC计算
应用
.ScreenUpdate=False
varCalcmode=.Calculation
.Calculation=xlCalculationManual
以
带图纸(“主数据”)
LastRowNum=.Cells(Rows.count,1).End(xlUp).Row
'对于NB、FO等字段,如果您的引用不存在,则删除整行。
对于i=2到LastRowNum
If.Cells(i,2).Value2“YC”和.Cells(i,2).Value2“YK”和_
.单元格(i,2).值2“MK”和单元格(i,2).值2“WK”和_
.Cells(i,2).Value2“AN”和.Cells(i,4).Value2=vbNullString然后
如果DeleteRng什么都不是,那么
设置DeleteRng=图纸(“主数据”)。行(i)
其他的
设置DeleteRng=Union(DeleteRng,shets(“主数据”)。第(i)行)
如果结束
如果结束
如果结束
接下来我
以
如果Not DeleteRng为Nothing,则DeleteRng.EntireRow.Delete Shift:=xlUp
应用
.Calculation=varCalcmode
.ScreenUpdate=True
以
端接头
此方法速度更快
Private Sub Remove_incomplete_records_Click()
Dim n, count As Integer
Dim i As Long
Dim lastrownum As Integer
Dim rngU As Range
lastrownum = Sheets("Master_Data").Cells(Rows.count, 1).End(xlUp).Row
Dim varCalcmode
Application.ScreenUpdating = False
Do While (lastrownum)
'for NB,FO etc if field your refernence is not present then delete the entire row.
For i = 2 To lastrownum
If (Sheets("Master_Data").Cells(i, 2).Value <> "YC" And Sheets("Master_Data").Cells(i, 2).Value <> "YK" And Sheets("Master_Data").Cells(i, 2).Value <> "MK" And Cells(i, 2).Value <> "WK" And Sheets("Master_Data").Cells(i, 2).Value <> "AN") Then
If (Sheets("Master_Data").Cells(i, 4).Value = "") Then
'On Error Resume Next
With Sheets("Master_Data")
If rngU Is Nothing Then
Set rngU = .Range("a" & i)
Else
Set rngU = Union(rngU, .Range("a" & i))
End If
End With
'Sheets("Master_Data").Rows(i).EntireRow.Delete Shift:=xlUp
'varCalcmode = Application.Calculation
'Application.Calculation = xlCalculationManual
'Application.ScreenUpdating = False
Else
End If
Else
End If
Next i
Loop
rngU.EntireRow.Delete
'Application.Calculation = varCalcmode
'Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Private Sub Remove\u complete\u records\u Click()
Dim n,计数为整数
我想我会坚持多久
将lastrownum设置为整数
暗rngU As范围
lastrownum=工作表(“主数据”)。单元格(Rows.count,1)。结束(xlUp)。行
Dim可变电容模式
Application.ScreenUpdating=False
执行时(lastrownum)
'对于NB、FO等字段,如果您的引用不存在,则删除整行。
对于i=2到lastrownum
如果(表(“主数据”).单元格(i,2).值“YC”和表(“主数据”).单元格(i,2).值“YK”和表(“主数据”).单元格(i,2).值“MK”和单元格(i,2).值“WK”和表(“主数据”).单元格(i,2).值“AN”),则
如果(表(“主数据”)单元格(i,4).Value=“”),则
'出现错误时,请继续下一步
带图纸(“主数据”)
如果rngU什么都不是
设置rngU=.Range(“a”&i)
其他的
设置rngU=Union(rngU、.Range(“a”&i))
如果结束
以
'工作表(“主数据”).行(i).EntireRow.Delete Shift:=xlUp
'varCalcmode=Application.Calculation
'Application.Calculation=xlCalculationManual
'Application.ScreenUpdate=False
其他的
如果结束
其他的
如果结束
接下来我
环
rngU.EntireRow.Delete
'Application.Calculation=varCalcmode
'Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头
从最后一行开始向上工作是实现优化的廉价方法。最佳解决方案。感谢没有问题-如果答案解决了您的问题,请不要忘记单击答案旁边的勾号