Excel Vbamacros根据单元格值和列名称删除行或列

下面可以更改以执行下列操作:根据列名称和单元格值删除行吗? 或多个列名和单元格? 这个例子是:我想要删除名为“状态”的列中的值为“完成”的任何东西,但是我也可能想删除名为“第二状态”的列中的任何“完成”,但是如果“完成“在列”ColumnA“和跨多张表以及…我知道这是要求了很多..

希望有道理,并提前!

Sub TestDeleteRows() Dim rFind As Range Dim rDelete As Range Dim strSearch As String Dim sFirstAddress As String Dim sh As Worksheet strSearch = "Completed" Set rDelete = Nothing Application.ScreenUpdating = False For Each sh In ThisWorkbook.Sheets With sh.Columns("A:AO") Set rFind = .Find(strSearch, LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlNext, MatchCase:=False) If Not rFind Is Nothing Then sFirstAddress = rFind.Address Do If rDelete Is Nothing Then Set rDelete = rFind Else Set rDelete = Application.Union(rDelete, rFind) End If Set rFind = .FindNext(rFind) Loop While Not rFind Is Nothing And rFind.Address <> sFirstAddress rDelete.EntireRow.Delete Set rDelete = Nothing End If End With Next sh Application.ScreenUpdating = False End Sub 

.AutoFilter方法提供了用于复制或删除的快速数据子集。

 Option Explicit Sub Macro1() Dim vCOLs As Variant With ActiveSheet If .AutoFilterMode Then .AutoFilterMode = False vCOLs = Array(Application.Match("Status", .Rows(1), 0), _ Application.Match("Second Status", .Rows(1), 0), _ 1) With .Cells(1, 1).CurrentRegion 'do not delete rows with 'Completed' in first column .AutoFilter field:=vCOLs(2), Criteria1:="<>Completed" 'delete rows with 'Complete' in Status column .AutoFilter field:=vCOLs(0), Criteria1:="Complete" With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) If CBool(Application.Subtotal(103, .Cells)) Then .Cells.EntireRow.Delete End If End With .AutoFilter field:=vCOLs(0) 'delete rows with 'Complete' in Second Status column .AutoFilter field:=vCOLs(1), Criteria1:="Complete" With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) If CBool(Application.Subtotal(103, .Cells)) Then .Cells.EntireRow.Delete End If End With End With If .AutoFilterMode Then .AutoFilterMode = False End With End Sub