【发布时间】:2017-06-19 14:28:56
【问题描述】:
我有一个嵌套在循环中的 if 语句,用于清理导入的数据。 if 语句评估活动单元格的值,然后如果活动单元格符合特定条件,则删除活动单元格的行。我想知道是否有另一种编码方式,因此它不会在每次迭代时都引用电子表格,从而使其运行速度比现在快。任何提示将不胜感激。我正在使用的代码如下:
Sub copy_RawAvgDem()
Dim wkb1 As Workbook
Dim sht1 As Worksheet
Dim wkb2 As Workbook
Dim sht2 As Worksheet
Set wkb1 = ThisWorkbook
Set wkb2 = Workbooks.Open("M:\FAST team\Inventory_Planning\2016_05_FG_Inv_targets.xlsx")
Set sht1 = wkb1.Sheets("RawAvgDem")
Set sht2 = wkb2.Sheets("Model")
sht2.ShowAllData
sht2.Cells.Copy
sht1.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
wkb2.Close False
Worksheets("RawAvgDem").Activate
Range("AN2").Select
Do Until IsEmpty(ActiveCell.Value)
If ActiveCell.Value = "MTO" Then
Rows(ActiveCell.Row).EntireRow.Delete
Else: ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub
【问题讨论】:
-
当您打开 wkb2 而不是将数据读取到工作表时,将此数据读入数组,然后从数组中删除任何“行”,然后将数组输出到工作表上。调用工作表很昂贵(就运行时间而言),如果需要速度,应该避免
-
附注:阅读stackoverflow.com/questions/10714251/… - 为什么不选择并激活。至于您的循环...尝试使用
AutoFilter过滤其中包含“MTO”的所有行并立即删除它们。
标签: vba excel loops if-statement