如果满足某些条件,则在VBA中删除行

时间:2013-08-04 07:12:00

标签: excel-vba vba excel

请找到下面附带的相关工作簿:

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

所以有3列,A列是日期,B列是与银行相关的值,C列是“exitflag”。基本上我想做的是以下几点:

如果“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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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