2013-03-08 128 views
0

我一直在处理一个宏,该宏删除表中的行,如果表的列A中的值与另一个单独的值中的任何值不匹配B列。目前,我的代码并没有正确地删除最后一行,我不能为了我的生活找出原因。Excel VBA - 循环未正确删除表中的最后一行

这里是我当前的代码:

Sub Stuff() 
    Dim rCell As Range, ColumnA As Range, ColumnB As Range 
    Dim rowPoint As Integer 

    Set ColumnA = ActiveWorkbook.Worksheets("Sheet1").Range("Table2[Column1]") 
    Set ColumnB = ActiveWorkbook.Worksheets("Sheet1").Range("Table1") 

    rowPoint = ColumnA.Count 

    On Error Resume Next 

    For i = rowPoint To 1 Step -1 
     For Each rCell In ColumnA 
      If Application.CountIf(ColumnB, rCell.Value) = 0 Then rCell.Rows.Delete 

     Next rCell 
    Next i 

End Sub 
+3

什么是For I = ... Next i'循环意味着什么? '我'从来没有在循环体中引用,并且'For Each rCell ... Next rCell'循环自己似乎已经足够了 – barrowc 2013-03-08 01:45:40

+0

对不起,我对此很有好感。之后我稍微清理了脚本,这样它实际上正确地向后循环了整个范围。它仍然留下一个不应该在那里的随机排。但android_newbie关于xlShiftUp的评论得到了这个宏的工作......虽然我仍然不完全清楚为什么。 – user2146675 2013-03-08 08:41:26

回答

-1

你是什么意思时,你说的最后一行没有被正确删除?

它被删除,格式是问题还是最后一行根本不被删除?

如果它是一个格式化问题,那么你只能在该列使用

If Application.CountIf(ColumnB, rCell.Value) = 0 Then rCell.Rows.Delete xlShiftUp 

这将删除单元格并移动已删除单元格下方的行向上而不改变其他列的结构。

+0

Omg xlShiftUp将它钉在头上。非常感谢。 – user2146675 2013-03-08 08:39:13

+2

您知道,只需使用SpecialCells – 2013-03-08 09:17:01

+0

@ user2146675即可在一个步骤中删除所有没有循环的行:如果此答案解决了您的问题,请通过单击复选标记标记答案! – 2013-03-10 23:30:20