excel vba 自动筛选范围并删除列 D 中包含 0 的所有行

excel vba autofilter range and delete all rows with 0 in col D

我有一长串数据(产品标签),另一个 sheet 有原始数据和计算结果。我有一个导入 A2 - AP2 中数据的宏。它扫描 Col D 并删除在 Col D 中具有零 (0) 值的任何行。我可以正常工作但是,是否有某种方法可以更改代码以仅删除从 A 到 AP 的行?我还有其他 3 个代码需要这个,但由于其他数据/帮助列,我不能只删除整行?

Worksheets("Labels").Activate
 ActiveSheet.AutoFilterMode = False

 ActiveSheet.Range(drop2).AutoFilter Field:=4, Criteria1:="=-", _
        Operator:=xlOr, Criteria2:="=+"

    Dim oRow As Range, rng As Range
    Dim myRows As Range
    With Sheets("Labels")
        Set myRows = Intersect(.Range("D:D").EntireRow, .UsedRange)
        If myRows Is Nothing Then Exit Sub
    End With

    For Each oRow In myRows.Columns(1).Cells
        If oRow.EntireRow.Hidden Then
            If rng Is Nothing Then
                Set rng = oRow
            Else
                Set rng = Union(rng, oRow)
            End If
        End If
    Next

    If Not rng Is Nothing Then rng.EntireRow.Delete

 ActiveSheet.AutoFilterMode = False
 Application.ScreenUpdating = True

如果没有看到您的 excel 数据,我无法猜测您在代码中做了什么。但是,根据您的解释,您将查看 D 列,如果找到 0,则将删除整行。但是,您不想删除整行,因为那样会删除辅助列。我只是想重复你说的话。如果这是您想要的,请使用带 Shift:=xlUp

的范围删除函数调用
Range("A2:AP2").Delete Shift:=xlUp

这不会删除整行,只会删除 A2:AP2 中的数据并将下面的所有单元格向上移动。类似于删除整行并保持辅助列不变。

更新 1:

我会尝试用一个小例子来解释它。下面的屏幕截图显示了我正在使用的示例数据,

黄色标记的单元格具有零值,需要清除除辅助列数据以外的所有行。下面是此 excel 数据的示例代码,

Dim i As Integer
Dim myRows As Range

Set myRows = Intersect(Sheet1.Range("A:E").EntireRow, Sheet1.UsedRange)
If myRows Is Nothing Then Exit Sub

For i = 1 To myRows.Rows.Count
    If Sheet1.Cells(i, 4) = 0 Then
        Sheet1.Range("A" & CStr(i) & ":E" & CStr(i)).Delete (xlUp)
    End If
Next

如果执行了上面的代码,下面是结果的截图。请注意,D 列中值为 0 的整行已被删除,Helper 列不受影响。