我是Excel VBA的新手,可以真正使用一些帮助。我尝试在整个网络上搜索解决方案,但无法找到类似的问题。
我正在尝试创建一个有助于根据特定条件删除行的宏,并继续删除行,直到满足另一个特定条件。
所以举个例子。在下表中,我想删除Col A = 1 AND Col C = 0的行,然后继续删除该行下面的行 UNTIL 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
期待收到回复!
谢谢
答案 0 :(得分:0)
您的循环在第一行停止,因为符合条件。因此,下面的代码从第一行循环到最后一行,以搜索标准。
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尝试的方法。
另一种方法是过滤多标准并删除显示的行。