VBA基于另一个单元移除单元格的高效方法
有没有一种有效的方法来删除单元格旁边的单元格是空的?
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
我希望循环通过从6到5006列b的范围内,如果它是空的,然后删除列C,D,E,F已经为我工作在较小的工作,但由于某种原因是这个项目,当我运行它最大的CPU出来,最终会崩溃(不知道为什么它在一个i3),所以想知道是否有一个更有效的方式来做到这一点。
这不是关于效率的根本问题,而是更多的是将.Value
赋值给""
并不清除单元格,而是将零长度的string插入到单元格中。
如果你更换
If lol.text = "" Then
同
If VBA.IsEmpty(lol) Then
和
Cells(v, 3).Value = ""
同
Cells(v, 3).Clear
等一切都会好的。 另外,删除行计数器v
并使用lol.Row
来代替。 当使用For Each
时,你不应该假设lol
回来了。
下面的代码可能比你的代码更快一点。
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)使用简单的循环而不是foreach循环