Excel VBA对于每个跳过的单元格

我在excel vba编码一个简单的macros,如果第一个单元格有特定的文本删除整行。 以下是目前的代码:

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的数字。

如果我激活macros,它删除除2,4,6,8,10,12,14,16,18和20以外的每一行。如果我再次激活macros,它删除除了4,8,12,16, 20如果我再次激活macros,它会删除除了8,16之外的所有内容。

为什么发生这种情况? 据我了解,我的macros一个接一个地检查第一列的单元格是否有单词“BORRAR”,如果是,则删除整行。 为什么要删除2,4,8 …的倍数?

这是因为你正在向前迈进并删除它们。

如果删除第2行,则第3行成为新的第2行,循环继续查看第3行,实际上第4行 – 第3行已完全丢失。

使用:

 For x = 20 to 1 Step -1 If Worksheets("Hoja2").Cells(x,1) = "BORRAR" then Worksheets("Hoja2").Cells(x,1).EntireRow.Delete End IF Next x 

注 – 我没有testing过上面的代码,但它应该可以工作。

这意味着下一行占用了被删除的行。 但是索引是由内核中的下一行单元格移动的

这个问题的原因是每个循环检测有多less元素需要循环。 然后开始第一,第二,第三等元素的操作。 当你删除第一个元素时,第二个元素成为第一个元素,但循环继续它与新的第二个元素的工作。 如果使用Range("A20:A1")可以尝试更好的工作。 如果仍然无法工作,则必须使用For ToWhile循环。