删除第 i 行和 VBA 中的下一行
Delete row i and next row in VBA
我正在寻找 运行 检测零值并删除特定行的 for 循环。我遇到的麻烦是目标列是合并的单元格(合并了 2 行)。
下面的代码有效,但只删除了两行中的第一行,留下另一行。如何展开 i 以包括下一行?
提前致谢。
Dim i As Long, Lr As Long
Lr = Range("A" & Rows.Count).End(xlUp).Row
For i = Lr To 1 Step -1
If Range("O" & i).Value = "" Then GoTo NextI
If Range("O" & i).Value = 0 And IsNumeric(Range("O" & i).Value) Then Rows(i).Delete
NextI:
Next i
合并性测试
如果您混合使用合并的单元格和未合并的单元格,您可以使用 Range.MergeCells 属性.
测试合并情况
引用合并范围
Range.MergeArea 属性 将为您提供来自单个单元格的完整合并范围。所以使用 Range.MergeArea.EntireRow.Delete
将删除合并单元格的所有行。
来自合并范围的值:
我 运行 遇到的一个常见问题是尝试测试合并区域中单元格的值并获取 Empty 或 Blank 值。这是因为只有合并区域的左上角单元格实际保存值,其他单元格为空。对于单个单元格 .MergeArea
returns 本身,即使未合并,所以混合使用合并和未合并的单元格,您可以执行 Range.MergeArea.Cells(1).Value
而不是 Range.Value
而不必担心合并测试-性。这将确保您获得合并区域的显示值而不是空白。
这是您添加了这些想法的代码:
Dim i As Long, Lr As Long
Lr = Range("A" & Rows.Count).End(xlUp).Row
For i = Lr To 1 Step -1
Dim val As Variant
With Range("O" & i)
val = .MergeArea.Cells(1).Value
If val = "" Then GoTo NextI
If val = 0 And IsNumeric(val) Then .MergeArea.EntireRow.Delete
End With
NextI:
Next i
我正在寻找 运行 检测零值并删除特定行的 for 循环。我遇到的麻烦是目标列是合并的单元格(合并了 2 行)。
下面的代码有效,但只删除了两行中的第一行,留下另一行。如何展开 i 以包括下一行?
提前致谢。
Dim i As Long, Lr As Long
Lr = Range("A" & Rows.Count).End(xlUp).Row
For i = Lr To 1 Step -1
If Range("O" & i).Value = "" Then GoTo NextI
If Range("O" & i).Value = 0 And IsNumeric(Range("O" & i).Value) Then Rows(i).Delete
NextI:
Next i
合并性测试
如果您混合使用合并的单元格和未合并的单元格,您可以使用 Range.MergeCells 属性.
测试合并情况引用合并范围
Range.MergeArea 属性 将为您提供来自单个单元格的完整合并范围。所以使用 Range.MergeArea.EntireRow.Delete
将删除合并单元格的所有行。
来自合并范围的值:
我 运行 遇到的一个常见问题是尝试测试合并区域中单元格的值并获取 Empty 或 Blank 值。这是因为只有合并区域的左上角单元格实际保存值,其他单元格为空。对于单个单元格 .MergeArea
returns 本身,即使未合并,所以混合使用合并和未合并的单元格,您可以执行 Range.MergeArea.Cells(1).Value
而不是 Range.Value
而不必担心合并测试-性。这将确保您获得合并区域的显示值而不是空白。
这是您添加了这些想法的代码:
Dim i As Long, Lr As Long
Lr = Range("A" & Rows.Count).End(xlUp).Row
For i = Lr To 1 Step -1
Dim val As Variant
With Range("O" & i)
val = .MergeArea.Cells(1).Value
If val = "" Then GoTo NextI
If val = 0 And IsNumeric(val) Then .MergeArea.EntireRow.Delete
End With
NextI:
Next i