【发布时间】:2018-09-26 15:09:30
【问题描述】:
我正在尝试优化将删除符合特定条件的行的代码。我有工作代码,但以下代码创建了 7 秒的等待时间来执行:
Dim j As Long
For j = 2 To Rows.Count
If (Range("J" & j).Value <> "") Then
Range("A" & j & ":R" & j).Select
Selection.Delete Shift:=xlUp
End If
Next j
以下代码立即运行;但是,一旦 j = 2,我就无法让它工作。在删除第 1 行中的列标题之前,需要添加什么代码来停止循环?
' Delete rows where column J is not blank
For j = Range("J" & Rows.Count).End(xlUp).Row To 1 Step -1
If (Range("J" & j).Value <> "") Then
Range("A" & j & ":R" & j).Select
Selection.Delete Shift:=xlUp
End If
Next j
【问题讨论】:
-
如果要删除行,则需要向后循环。
-
你为什么不写
For j = ... To 2 Step -1? -
至 2 Step -1 就是答案。当您只是窃取一些代码而您实际上并不知道这一切意味着什么时,就会发生这种情况!对缺少缩进表示歉意...我的原始代码格式从 stackoverflow 得到一个错误,说所有代码都需要缩进 4 个空格。我太从字面上理解了。菜鸟失误。谢谢大家的帮助!
-
Markdown 语法需要 4 个空格来识别这样的代码块 - 您仍然可以保留原始和正确的缩进:只需粘贴您的代码,然后将其全部选中并按 Ctrl+K (或使用编辑工具栏中的
{}按钮) -
我还要补充一点,第一个代码块是遍历所有行,而第二个代码块从包含数据的最后一行开始 - 这必须节省几秒钟。