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 列不受影响。
我有一长串数据(产品标签),另一个 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 列不受影响。