我有以下两列(简体)
Bond BMW
Equity Amazon
Bond Netflix
Bond Uber
Equity Google
我想要一个基本上经过第一列并删除该行的代码,如果它是Equity
。
我的想法(就for循环而言):
for i = 1 to 5
if ws.Cells(i,1).Value = "Bond" Then
Else
ws.Rows(i).Select
End If
Next i
Selection.Delete
End Sub
我注意到的问题是只有最后一个要选择的单元格被删除。我本以为会选择我在循环中选择的所有单元格。是否有选择多个的特定方法。 (Union
在这种情况下不起作用,因为它是动态列表)。
答案 0 :(得分:2)
通常,在删除行时,您将从底部开始并逐步向上。
Sub Button2_Click()
Dim LstRw As Long, x
LstRw = Cells(Rows.Count, "A").End(xlUp).Row
For x = LstRw To 1 Step -1
If Cells(x, "A").Value = "Equity" Then
Cells(x, "A").EntireRow.Delete
End If
Next x
End Sub
答案 1 :(得分:0)
要使与工作表的活动保持在最低水平,请尝试这样
Sub Button2_Click()
Dim DeleteRange As Range
Dim LstRw As Long, x As Long
LstRw = Cells(Rows.Count, "A").End(xlUp).Row
For x = 1 To LstRw
If Cells(x, "A").Value = "Equity" Then
If DeleteRange Is Nothing Then
Set DeleteRange = Rows(x)
Else
Set DeleteRange = Union(DeleteRange, Rows(x))
End If
End If
Next x
If Not (DeleteRange Is Nothing) Then
DeleteRange.EntireRow.Delete
End If
End Sub
也不必向后循环,因为删除操作在最后完成。