请找到下面附带的相关工作簿:
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
同样最好我希望代码是“选择”。代码而不是指定范围,因为我想在其他数据集上重用代码,但行数不同。
非常感谢任何帮助!
答案 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