删除第 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