是否有一种有效的方法可以移除靠近它的单元格上的单元格?
Dim v As Integer
v = 1
For Each lol In Range("B6:B5006")
If lol.text = "" Then
Cells(v, 3).Value = ""
Cells(v, 4).Value = ""
Cells(v, 5).Value = ""
Cells(v, 6).Value = ""
End If
v = v + 1
Next lol
我希望在b列中循环通过6到5006的范围,如果它是空的,则删除已经为我工作的C,D,E,F列,但是出于某种原因,当我运行时这个项目是它最大限度地消耗了CPU并且最终会崩溃(不知道它为什么会在i3上运行)所以想知道是否有更有效的方法来做到这一点。
答案 0 :(得分:1)
从根本上讲,效率并不是关于将.Value
分配给""
不清除单元格,而是插入零长度这一事实串入该单元格。
如果您更换
If lol.text = "" Then
与
If VBA.IsEmpty(lol) Then
和
Cells(v, 3).Value = ""
与
Cells(v, 3).Clear
等。然后一切都会好的。另外,删除行计数器v
并改为使用lol.Row
。在使用lol
时,您不应该真正假设For Each
以任何特定顺序返回。
答案 1 :(得分:0)
以下代码可能比您的代码快一点。
Dim v As Integer
For v=6 to 5006
if cells(v,2)="" then
Range("C" & v & ":F" & v).clear ' Clear cells Cv:Fv
End If
Next v
此代码在执行速度方面具有一些优势。
1)一次清除四个细胞
2)使用简单的for循环而不是foreach循环