0

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

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

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

非常感谢任何帮助!

4

2 回答 2

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
于 2013-08-04T08:38:24.813 回答
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
于 2013-08-04T07:24:04.490 回答