Инстр с оператором If - PullRequest
       1

Инстр с оператором If

0 голосов
/ 24 сентября 2019

Может кто-нибудь указать, где я ошибаюсь?

Я хочу удалить определенные строки, если они не соответствуют критериям, указанным в приведенном ниже коде.

Я имеюпопытался зацикливание с помощью оператора If и функции Instr, но безуспешно.

Dim Firstrow As Integer
Dim Lastrow As Integer
Dim Lrow As Integer
Dim celltxt As String

Firstrow = 1
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row

For Lrow = Lastrow To Firstrow Step -1

    If InStr(Lrow, Range("ED" & Lrow), "FTOP") > 0 Then Sheets(Sheet1).Rows(Lrow).Delete

    If InStr(Lastrow, LCase(Range("DT" & Lrow)), "BB") > 0 Then Sheets(Sheet1).Rows(Lrow).Delete

    If Sheets(Sheet1).Cells(Lrow, "DX").Value = "SET" Then Sheets(Sheet1).Rows(Lrow).Delete

    If Sheets(Sheet1).Cells(Lrow, "EM").Value = "=*AAA" Then Sheets(Sheet1).Rows(Lrow).Delete

Next Lrow

Нет сообщений об ошибках

1 Ответ

1 голос
/ 24 сентября 2019

Я изменил ваш макрос для циклического прохождения каждой строки от Lastrow до строки 2, и если значение или строковая часть найдены в любом из четырех столбцов в строке, строка будет удалена.Объедините все операторы IF в один, используя OR.Удалили Lrow и Lastrow из функции INSTR и поместили AAA в функцию INSTR.Lrow сбивал с толку, поэтому я удалил и использовал переменную i для цикла.Также добавлена ​​справочная переменная книги / листа.

Sub DeleteRowsThatMeetCriteria()
    'Declare your variables
    Dim ws As Worksheet, Lastrow As Long, i As Long

    Set ws = ThisWorkbook.Sheets("Sheet1") 'Set the worksheet
    Lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 'Assign the last row varaible

        For i = Lastrow To 2 Step -1 'Assign "i" as a long number to loop from the last row to row 2

        'Because you are testing different columns for different value and performing the same delete function,
        'you can combine each test using OR, so you only need one IF statement. I removed "Lrow and Lastrow" variables
        'because they were causing confusion and not needed inside the INSTR function. Since "SET" was the only full word
        'i did not change it. But I used INSTR for "AAA" since it was part of a string.

        If InStr(ws.Range("DT" & i), "BB") <> 0 _
            Or ws.Range("DX" & i).Value = "SET" _
            Or InStr(ws.Range("ED" & i), "FTOP") <> 0 _
            Or InStr(ws.Range("EM" & i), "AAA") <> 0 Then
            ws.Rows(i).Delete
        End If

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