excel vba自动过滤范围并删除col D中所有带0的行
Posted
技术标签:
【中文标题】excel vba自动过滤范围并删除col D中所有带0的行【英文标题】:excel vba autofilter range and delete all rows with 0 in col D 【发布时间】:2015-12-26 04:00:42 【问题描述】:我有一长串数据(产品标签),另一张表有原始数据和计算。我有一个宏可以导入 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
【问题讨论】:
将Intersect
与.SpecialCells(xlCellTypeVisible)
一起使用,如图所示Here 仅适用于过滤范围:)
我会试一试 Siddharth,我的大部分代码(包括相交)来自谷歌搜索和另一个论坛。老实说,我不是 100% 确定代码在做什么,但它在大多数情况下确实有效。
【参考方案1】:
如果没有看到您的 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 列不受影响。
【讨论】:
它不会总是在第 2 行,因为它会从第 2 行扫描到 X(通常小于 5000)。我是否应该将当前行设置为变量 ex Range("A2:AP2").Delete Shift:=xlUp 将变暗 rd as string dr = activecell.row Range("A" & rdel &":AP" & rdel).删除 Shift:=xlUp 是的。这是我试图举的一个例子。肯定你将不得不动态地使用它。 “如果不是 rng 什么都不是,那么 rng.EntireRow.Delete” - 这在您的代码中,您可能需要调用 rng.Delete Shift:xlUp。类似的东西。Dim rdel As String If Not rng Is Nothing Then Range("A" & rdel & ":AP" & rdel).Delete shift:=xlUp
删除了我所有的数据,还好我在尝试之前保存了一个版本。我猜我编码错误。
很好,你得到了它的副本。始终在单独的副本中测试代码,保留原始保险箱。我已经用示例和屏幕截图更新了答案。请检查它是否可以帮助您解决问题。
没错,如果你想插入一行调用.insert。例如:Sheet1.Range("A2:E2").Insert(xlDown) 将在第二行从 A 插入一行单元格到 E。以上是关于excel vba自动过滤范围并删除col D中所有带0的行的主要内容,如果未能解决你的问题,请参考以下文章