Удалить все строки, не содержащие подстроку в столбце, используя InStr - PullRequest
0 голосов
/ 05 февраля 2020

Я хотел бы уменьшить свою таблицу до всех строк, которые имеют подстроку «X» во втором столбце. Для этого я написал следующее:

Sub reduce()
   Dim lngRow As Long

    With ActiveWorkbook.ActiveSheet
        lngRow = .Cells(65536, 1).End(xlUp).Row

        Do
            pos = InStr(.Cells(lngRow, 2), "X")

            If Not pos > 0 Then

                .Rows(lngRow).Delete

            End If


            lngRow = lngRow - 1
        Loop Until lngRow = 1
    End With
End Sub

К сожалению, я получаю эту ошибку: https://docs.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/application-defined-or-object-defined-error

1 Ответ

0 голосов
/ 05 февраля 2020

Как это сделать в al oop. Это больше кода, но более эффективно, чем текущий метод. @BigBen правильно, что фильтр является оптимальным, учитывая текущую постановку задачи

Sub Reduce()


'Declare variables
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update Sheet
Dim LR As Long
Dim xCell As Range, xRange As Range
Dim DeleteMe As Range


'Assign/Set necessarry variables
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Set xRange = ws.Range("A2:A" & LR)


'Create Union (Collection Of Rows) to Delete
For Each xCell In xRange
    If Not InStr(xCell.Offset(0, 1), "X") Then
        If Not DeleteMe Is Nothing Then
            Set DeleteMe = Union(xCell, DeleteMe)
        Else
            Set DeleteMe = xCell
        End If
    End If
Next xCell


'Delete the Union
If Not DeleteMe Is Nothing Then
    DeleteMe.EntireRow.Delete
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...