我是Excel VBA的新手,可以真正使用一些帮助。我尝试在整个网络上搜索解决方案,但找不到类似的问题。
我正在尝试创建一个宏,该宏将根据某些标准删除行,并继续删除行直到满足另一个某些标准。
所以。在下表中,我想删除col A = 1 和 col C = 0的行,然后继续将行删除在该行下方>直到 col A = 1和col c<> 0
A | B | C
-----|-----|-----
1 | TC | 2
-----|-----|-----
2 | TC | 1
-----|-----|-----
1 | TC | 0
-----|-----|-----
2 | TC | 2
-----|-----|-----
3 | TC | 1
-----|-----|-----
1 | TC | 2
-----|-----|-----
1 | TC | 0
-----|-----|-----
1 | TC | 1
-----|-----|-----
2 | TC | 0
-----|-----|-----
3 | TC | 2
因此,宏的最终结果是:
A | B | C
-----|-----|-----
1 | TC | 2
-----|-----|-----
2 | TC | 1
-----|-----|-----
1 | TC | 2
-----|-----|-----
1 | TC | 1
-----|-----|-----
2 | TC | 0
-----|-----|-----
3 | TC | 2
理想情况下,我想通过删除行再次循环,其中col a = 2和col c = 0,然后将行下方删除,直到col a = 2和col c<> 0。
下面是我想到的宏。向所有建议开放,并渴望学习。
Sub deleterow()
Range("C2").Select
Do Until ActiveCell.Offset(0, -2) = "1" And ActiveCell.Value <> "0"
If ActiveCell.Value = "0" And ActiveCell.Offset(0, -2) = "1" Then
Rows(ActiveCell.Row & ":" & Rows.Count).Delete
End If
Loop
End Sub
期待听到!
谢谢
您的循环在第一行停止,因为满足了标准。因此,从第一行到最后一行的代码以下循环以搜索标准。
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1) 'Set the first worksheet to work
Dim n As Long, i As Long
Dim rng As Range, new_rng As Range
lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'lastrow number
For n = 1 To 2 'Criteria is Col A = 1 To 2
For i = 1 To lastrow 'Loop from 1 to last row
If ws.Cells(i, 1) = n And ws.Cells(i, 3) = 0 Then
If rng Is Nothing Then Set rng = ws.Range("A" & i) 'Set first Range so Union won't give an error
Set new_rng = ws.Range("A" & i)
Set rng = Union(rng, new_rng) 'create a non contiguous range to delete
End If
Next i
Next n
rng.EntireRow.Delete
请注意,如果表格很大,则不是最佳方法。有最好的方法来提高代码性能。使用了一个循环,因为这是OP
尝试的方法
另一种方法是过滤多个标准并删除所显示的行。