2013-08-04 92 views
0

请找到相关的工作簿下面附:在VBA删除行,如果满足一定条件

https://www.dropbox.com/s/zlwz12sigx5w6le/deleting%20rows.xlsm

因此,有3列,A列是日期,列B是涉及到银行和列值C是“退出标志”。基本上我想要做的是以下内容:

如果在exitflag下的数字是1,那么我想删除整行,例如在第2行中,“exitflag”取值为1,所以我希望删除整行,以便与银行相关的日期和值也被删除。删除我的意思是我想要删除的行,以便下一行“转移”,以便不出现空行。还要注意的是,在列B下面也有数字1,例如,行201,我不想删除这些,我只希望将行删除,其中exitflag的值为1.

我写了下面的代码但由于某些原因,我不认为它的工作原理(或者,如果它不工作,我必须保持在运行它,并且,它不会做我想做的事,一口气):

Sub DeleteRows() 

    For Each R In Selection.Rows 

     For Each c In R.Cells(1, 3) 
      If c.Value = 1 Then 
       R.Delete 
      End If 
     Next 

    Next 

End Sub 

而且最好我希望代码成为“选择”。代码,而不是指定范围,因为我想重复使用其他数据集上的代码,但行数不同。

非常感谢您的任何帮助!

回答

2

它是由优秀的程序员也取得了相当常见的错误。当删除时,您应该从最后一个位置开始并向后计数。如果不是,您将删除集合中的一个元素,更改集合中其他元素的顺序。因此,您(宁愿)不会删除所有必需的收集项目。

没有寻找到您的工作表,这可能是一个解决方案(未测试):

Sub DeleteRows() 

    Dim i as Long 
    For i= Selection.Rows.Count To 1 Step -1 

     For Each c In Selection.Rows(i).Cells(1, 3) 
      If c.Value = 1 Then 
       c.EntireRow.Delete Shift:=xlUp 
       Exit For 'can be important 
      End If 
     Next 

    Next 

End Sub 
+0

是的 - 倒数是要走的路 –

0

试试这个。

Sub DeleteRows() 
    Dim flag As Range, exitFlags As Range 

    Set exitFlags = Selection //NOTE: just select the ExitFlags column 

     For Each flag In exitFlags 
      If flag = 1 Then 
       flag.EntireRow.Delete Shift:=xlUp 
      End If 
     Next 
End Sub