VBA基于另一个细胞去除细胞的有效方法

时间:2014-10-02 09:04:37

标签: excel vba excel-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

我希望在b列中循环通过6到5006的范围,如果它是空的,则删除已经为我工作的C,D,E,F列,但是出于某种原因,当我运行时这个项目是它最大限度地消耗了CPU并且最终会崩溃(不知道它为什么会在i3上运行)所以想知道是否有更有效的方法来做到这一点。

2 个答案:

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