我想根据条件删除某个范围内的一行(而不是整个行)。
我在那儿占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
列。
不确定我是否应该删除问题,但考虑到代码有效,因此可能会有用。
答案 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