Excel VBA删除行直到标准



我是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

尝试的方法

另一种方法是过滤多个标准并删除所显示的行。

最新更新