VBA удалить диапазон, если критерии удовлетворены - обход пустой строки - PullRequest
0 голосов
/ 07 января 2019

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

Код ниже работает хорошо, он удаляет диапазон («I: Q»), если значение в столбце «I» равно значению в ячейке «E2». Однако в моем диапазоне данных есть пустые строки, которые действуют как разделители и поэтому не могут быть удалены.

В случае, если первая строка пуста, код останавливается и думает, что он завершил свою работу. Когда на самом деле это ничего не сделало.

Sub deleteb2()

    Dim FindRng         As Range
    Dim Rng1            As Range
    Dim LastRow         As Long
    Dim TexttoFind      As Integer
    Dim TexttoFind1     As String

    With Sheets("DN Compile")

    TexttoFind = .Range("E2").Value 
    later

        LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row '<-- get last row with 
        data in Column E

        Set Rng1 = .Range("I1:Q" & LastRow)

        Set FindRng = Rng1.Find(What:=TexttoFind, LookIn:=xlValues, 
        LookAt:=xlWhole)

        While Not FindRng Is Nothing '<-- find was successful

            FindRng.Resize(, 10).delete xlShiftUp '<-- delete column "I:Q" in 
            found row

            Set FindRng = Rng1.Find(What:=TexttoFind, LookIn:=xlValues, 
            LookAt:=xlWhole)

        Wend
    End With
End Sub

Я думал как-то добавить оператор IF, который заставил бы код продолжать смотреть, если, например, код видит до 5 последовательных пустых строк, и только тогда он перестанет смотреть дальше.

Код теперь работает - я сделал одну небольшую корректировку, и она, кажется, работает нормально для меня!

Вот что я изменил:

LastRow = .Cells(.Rows.Count, "I").End(xlUp).Row '<-- get last row with data in Column E

Т.е. я изменил последнюю строку строки кода для подсчета столбца I вместо столбца E.

Не уверен, стоит ли мне просто удалить вопрос, но подумал, что поскольку код работает, это может быть полезно.

1 Ответ

0 голосов
/ 08 января 2019
Sub deleteb2()

Dim FindRng         As Range
Dim Rng1            As Range
Dim LastRow         As Long
Dim TexttoFind      As Integer
Dim TexttoFind1     As String

With Sheets("DN Compile")

TexttoFind = .Range("E2").Value


    LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row '<-- get last row with   data in Column E

    Set Rng1 = .Range("I1:Q" & LastRow)

    Set FindRng = Rng1.Find(What:=TexttoFind, LookIn:=xlValues, LookAt:=xlWhole)

    While Not FindRng Is Nothing '<-- find was successful

        .Range("i" & FindRng.Row).Resize(1, 10).Delete xlShiftUp '<-- Set range based on i column.

        Set FindRng = Rng1.Find(What:=TexttoFind, LookIn:=xlValues, LookAt:=xlWhole)

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