VBA帮助。根据多个条件删除行

时间:2016-09-13 02:22:28

标签: excel vba excel-vba

我正在寻找一些VBA帮助清理工作表,方法是删除我不需要的数据行,并根据多个条件保留我所做的数据行。

我希望能够在A列中保留任何等于“Subtotal:”的Row,并且在删除所有其他与该条件不匹配的行时保留包含C列中数字的任何行。

Before Cleanup

Desired Result Requested

2 个答案:

答案 0 :(得分:1)

我写了一个应该能够完成工作的函数。

因此,你可以从一个sub调用该函数并传递你想要测试的列号(1代表" A"),你要测试的值("" for blank),您要测试的工作表的名称。最后一个参数是一个布尔值,如果为true,它将在匹配条件中的值时删除,否则它将删除其他任何内容。

MYSQL_BIND

所以,为了做你上面提出的要求,你可以这样做:

sprintf()

答案 1 :(得分:0)

您可能需要尝试以下(注释)代码:

Option Explicit

Sub main()
    With Worksheets("MySheetName") '<--| change "MySheetName" to your actual sheet name
        With Intersect(.UsedRange, .Columns("A:C"))
            .AutoFilter Field:=1, Criteria1:="<>Subtotal" '<--| filter column "A" cells not containing "Subtotal"
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Offset(1).Resize(.rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete '<--| delete any filtered cell row
            .AutoFilter '<--| show all data back
            With .Offset(1, 2).Resize(.rows.Count - 1, 1) '<--| consider column "C" cell from header row (excluded) down
                DeleteRows .Cells, xlCellTypeConstants, xlTextValues '<--| delete any "constant text" cell row
                DeleteRows .Cells, xlCellTypeFormulas, xlTextValues '<--| delete any "formula text" cell row
                DeleteRows .Cells, xlCellTypeBlanks, xlTextValues '<--| delete any "blank" cell row
            End With
        End With
    End With
End Sub

Sub DeleteRows(rng As Range, cellType As XlCellType, cellsValue As XlSpecialCellsValue)
    Dim f As Range

    Set f = rng.SpecialCells(cellType, cellsValue)
    If Not f Is Nothing Then f.EntireRow.Delete
End Sub