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循环