我想知道是否有一种方法可以根据Excel VBA中不同的列和单元格数据删除特定的行

时间:2018-06-29 21:04:43

标签: excel-vba vba excel

我有一个电子表格,我经常用来安排预防性维护。电子表格包含4300多行和600列。这是我用来计划维护的主电子表格。

"A"开始的列包含

  • "A"列标题"system"
  • "B"标题"sub-system"
  • "C"标题"asset"
  • "C"列标题"Asset""EH" "Name"列之间的范围内的许多列包含三年的星期数和其他标题
  • "EH" "Name"
  • "EI" "Date"
  • "EJ" "Initials"

与日期格式化的星期关联的单元格在该列的上下动态单元格中包含诸如"W-1, or IS-3, or E3-1"之类的动态字符串。我已经提供了我要寻找的示例的屏幕截图。该工作表以及该工作簿均命名为Schedule。非常感谢您可以使用VBA提供的任何帮助来帮助自动执行此耗时的过程。

Schedule example

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,只要满足D列中的特定条件,您只想删除工作表中的所有行?可以使用下面的代码,但是请确保在尝试之前备份文件!

Sub deleteRowsBasedOnCriteria()
    Dim i As Long, lastRow As Long
    Dim sht As Worksheet

    Application.ScreenUpdating = False

    Set sht = ThisWorkbook.Sheets("test") ' change sheet name to correct one in production

    With sht
        lastRow = .Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
        For i = lastRow To 2 Step -1 ' presuming there are headers at the top in row 1

            ' if necessary, change the criterion or add more criteria --> this is just based on your example
            If .Cells(i, 4).Value <> "X" Then .Rows(i).Delete

        Next i
    End With

    Application.ScreenUpdating = True

End Sub

如果您需要删除大量行,建议您设置一个范围对象,然后一次删除它们,因为这样做效率更高,但是我怀疑上面的代码符合您的要求。

答案 1 :(得分:0)

这是C列中具有非空白单元格的行与D列中具有空白单元格的行的交集:

Set r = Range("C:C").SpecialCells(xlCellTypeConstants).Offset(, 1)
Intersect(r, r.SpecialCells(xlCellTypeBlanks)).EntireRow.Delete