[英]excel vba autofilter range and delete all rows with 0 in col D
我有一長串數據(產品標簽),另一張表有原始數據和計算。 我有一個宏可以導入 A2 - AP2 中的數據。 它掃描列 D 並刪除列 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
如果上面的代碼被執行,下面是結果的屏幕截圖。 請注意,具有 0 值的 D 列的整行都被刪除了,而 Helper 列不受影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.