使用IF时的多重选择以便最后删除

时间:2018-10-22 08:54:07

标签: excel vba excel-vba

我有以下两列(简体)

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在这种情况下不起作用,因为它是动态列表)。

2 个答案:

答案 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

也不必向后循环,因为删除操作在最后完成。