Excel - 根据单元格值删除上面的当前行和行

时间:2016-07-26 11:52:45

标签: excel vba excel-vba cell rows

每周我都会收到一封最多可包含4,000行的电子表格。如果任何日期在C列中,我需要删除该行及其上方的行。有人可以帮助我一些VBA代码,我可以在每周我得到的每个新文件上运行。每周手工浏览4,000多行数据会很痛苦。

在屏幕截图中,我将删除第157,158,159和160行 Screenshot showing rows to be deleted

非常感谢帮助。

1 个答案:

答案 0 :(得分:3)

尝试这个简短的宏:

Sub dural()
    Dim N As Long, i As Long, v As Variant

    N = Cells(Rows.Count, "C").End(xlUp).Row

    For i = N To 2 Step -1
        v = Cells(i, "C").Value
        If v <> "" Then
            If IsDate(v) Then
                Range(Cells(i, "C"), Cells(i - 1, "C")).EntireRow.Delete
            End If
        End If
    Next i
End Sub

修改#1:

如果您有两个或更多连续单元格,日期如下:

enter image description here

然后应使用此代码:

Sub dural()
    Dim N As Long, i As Long, v As Variant
    Dim rKill As Range
    N = Cells(Rows.Count, "C").End(xlUp).Row
    Set rKill = Nothing
    For i = N To 2 Step -1
        v = Cells(i, "C").Value
        If v <> "" Then
            If IsDate(v) Then
                If rKill Is Nothing Then
                    Set rKill = Cells(i, "C")
                    Set rKill = Union(rKill, Cells(i - 1, "C"))
                Else
                    Set rKill = Union(rKill, Cells(i, "C"))
                    Set rKill = Union(rKill, Cells(i - 1, "C"))
                End If
            End If
        End If
    Next i

    If rKill Is Nothing Then Exit Sub
    rKill.EntireRow.Delete
End Sub

(这将确保所有&#34; x&#34;行也会被删除。)