【发布时间】:2015-07-10 12:00:19
【问题描述】:
我在 excel vba 中编写了一个简单的宏,如果第一个单元格有特定的文本,它会删除整行。 到目前为止的代码如下:
Sub MyMacro()
For Each MyCell In Worksheets("Hoja2").Range("A1:A20")
If MyCell.Value = "BORRAR" Then
MyCell.EntireRow.Delete
End If
Next
End Sub
我的 Sheet2 (Hoja2) 只有两列,第一列是从 A1 到 A20 的“BORRAR”,第二列只有数字,从 1 到 20。
如果我激活宏,它会删除除 2、4、6、8、10、12、14、16、18 和 20 之外的每一行。 如果我再次激活宏,它会删除除 4、8、12、16、20 之外的所有内容 如果我再次激活宏,它会删除除 8,16 之外的所有内容 以此类推。
为什么会这样?据我了解,如果第一列的单元格中包含“BORRAR”一词,我的宏会逐个检查,如果有,则会删除整行。为什么要删除 2,4,8...的倍数?
【问题讨论】:
-
答案本身就有问题
-
当您删除行时,您需要向后遍历行。尝试像
For i = lastrow to 2 Step -1这样的循环 -
表示下一行占用了删除的行。但是索引被移动到核心内部的下一行单元格
-
是的。非常感谢
-
性能方面,这对 ms 来说很好。开发人员明智的做法并不好。