根据多个值删除整行

Delete entire rows according to many values

我有一个很长的 excel 文件,我需要从中删除列 A 中包含某些值的整行。 该列包含从 [PAR001 到 PAR0023247] 的值,我需要删除属于 [PAR002537 到 PAR005214] 的值 哪种方法最快?

尝试在范围内搜索“PAR”并使用 val() 方法比较整数的不同长度,而不必搜索可能是右侧整数一部分的“0”。

倒数整个范围很重要。此外,如果您在相关列表上方有任何以“PAR”开头的单元格,则可能存在问题。

这对我有用。希望对你有用。

Public Sub DeleteRows()

Dim arr As Range
Dim tester As String
Dim NumElements As Long


Set arr = Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp))

NumElements = arr.Cells.Count
For i = NumElements To 1 Step -1
    If Left(arr(i), 3) = "PAR" Then
        tester = Right(arr(i), Len(arr(i)) - 3)
        If Val(tester) >= 2537 And Val(tester) <= 5214 Then
            Cells(i, 1).EntireRow.Delete
        End If
    End If
Next i

        
End Sub

说实话,我觉得@haplo76 的回答还不错

如果您的数据按这些 PARxxxx 值升序排序,我的回答将有效。如果没有,则使用@haplo76 answer

此解决方案的唯一优点是您无需循环,也无需在一行代码中删除所有行。

在我的测试中,我删除了行 [PAR03 到 PAR010]

Sub TEST()
Dim i_row As Long
Dim e_row As Long


'In e_row you want to match the value AFTER the last one you want to to delete
' so if you want to delete from PAR003 to PAR010
' i_row will search for PAR003 but e-row need to search for PAR011!!!

With Application.WorksheetFunction
    i_row = .Match("PAR003", Range("A:A"), 0)
    e_row = .Match("PAR011", Range("A:A"), 0)
End With

Range("A" & i_row & ":A" & e_row).Delete

End Sub

执行代码后我得到:

另一个优点是您可以轻松地将此子程序转换为通用子程序,仅要求删除 PARxx 值:

Sub TEST()
DELETE_ROWS "PAR003", "PAR011" 'this will delete [PAR003 to PAR010]
End Sub

Sub DELETE_ROWS(ByVal ini_val As String, end_val As String)
Dim i_row As Long
Dim e_row As Long

With Application.WorksheetFunction
    i_row = .Match(ini_val, Range("A:A"), 0)
    e_row = .Match(end_val, Range("A:A"), 0)
End With

Range("A" & i_row & ":A" & e_row).Delete

End Sub

但正如我一开始所说,只有当您的数据按 A 列升序排序时,这才有效。此外,如果您键入未找到的“PAR00xx”值,则会引发错误。