VBa conditional delete loop not working

前端 未结 4 625
滥情空心
滥情空心 2020-11-29 12:42

I am running the following code on a spreadsheet:

Do While i <= 100000
    If Not Cells(i, 4) = \"String\" Then
        Cells(i, 4).EntireRow.Delete
    E         


        
4条回答
  •  青春惊慌失措
    2020-11-29 13:12

    This is the worst way to delete a row. Reasons

    1. You are deleting the rows in a Loop
    2. Your Cells Object are not qualified

    Try this.

    Co-incidentally I answered a similar question in the MSDN forum as well. Please See THIS

    Try this way (UNTESTED)

    In the below code I have hardcoded the last row to 100000 unlike as done in the above link.

    Sub Sample()
        Dim ws As Worksheet
        Dim i As Long
        Dim delRange As Range
    
        '~~> Set this to the relevant worksheet
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        With ws
            For i = 1 To 100000
                If .Cells(i, 4).Value <> "String" Then
                    If delRange Is Nothing Then
                        Set delRange = .Rows(i)
                    Else
                        Set delRange = Union(delRange, .Rows(i))
                    End If
                End If
            Next i
    
            If Not delRange Is Nothing Then delRange.Delete
        End With
    End Sub
    

    NOTE: I am assuming that a cell will have values like

    String
    aaa
    bbb
    ccc
    String
    

    If you have scenarios where the "String" can be in different cases or in between other strings for example

    String
    aaa
    STRING
    ccc
    ffffdStringffffd
    

    then you will have to take a slightly different approach as shown in that link.

提交回复
热议问题