我有一个电子表格,我经常用来安排预防性维护。电子表格包含超过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提供任何帮助,帮助自动化这个耗时的过程。

发布于 2018-06-30 14:46:24
如果我正确理解你的问题,你只想删除工作表中的所有行,前提是满足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如果您需要删除大量行,建议您设置一个range对象,然后立即删除它们,因为这样做效率更高,但我怀疑上面的代码符合您的要求。
发布于 2018-06-30 15:17:14
这是C列中的行与非空白单元格的交集,D列中的行与空白单元格的交叉:
Set r = Range("C:C").SpecialCells(xlCellTypeConstants).Offset(, 1)
Intersect(r, r.SpecialCells(xlCellTypeBlanks)).EntireRow.Deletehttps://stackoverflow.com/questions/51109389
复制相似问题