如果满足条件,则VBA删除范围-空行绕过

时间:2019-01-07 19:06:42

标签: excel vba

我想根据条件删除某个范围内的一行(而不是整个行)。
我在那儿占90%,但是,数据的格式让我有些后退。

下面的代码运行良好,如果列“ I”中的值等于单元格“ E2”中的值,它将删除范围(“ I:Q”)。但是,我的数据范围(I:Q)中有空白行充当分隔符,因此无法删除。

在第一行为空白的情况下,代码停止并认为已完成工作。实际上什么也没做。

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 :(得分:2)

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