根据单元格值删除整行

use*_*124 5 vba excel-2003

我想在Excel(2003)中获取导入的数据转储并将其格式化为报表.我所做的大部分工作都涉及录制宏,然后根据需要自定义代码.我有一个需要纯代码的地方.

我有一个SORTED列(D)列出了事件类型(例如:车辆火灾,中风,动物咬伤等).我想读取D列中的每个值,如果它不是我们要查找的几个值中的一个,则删除整行.

我已经尝试了多个版本的代码(我在网上找到),并且生成最接近我需要的结果的代码如下所示:

Range("D:D").Select
Dim workrange As Range
Dim cell As Range
Set workrange = Intersect(Selection, ActiveSheet.UsedRange)
For Each cell In workrange
    If ActiveCell.Value <> "VFIRE" _
        And ActiveCell.Value <> "ILBURN" _
        And ActiveCell.Value <> "SMOKEA" _
        And ActiveCell.Value <> "ST3" _
        And ActiveCell.Value <> "TA1PED" _
        And ActiveCell.Value <> "UN1" _
            Then ActiveCell.EntireRow.Delete
Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)

此代码删除列表的大部分(原始168的约100行),但它只删除行,直到它达到我想要的第一个值.例如,此当前数据转储没有"ILBURN"或"SMOKEA"的任何值,但是当第一次出现"ST3"时,宏停止.没有产生错误,它似乎认为它已经完成.

我应该添加什么来通过整个列表调用宏?

tbu*_*bur 5

我只是简洁.

Sub DeleteRowBasedOnCriteria()
Dim RowToTest As Long

For RowToTest = Cells(Rows.Count, 4).End(xlUp).Row To 2 Step -1

With Cells(RowToTest, 4)
    If .Value <> "VFIRE" _
    And .Value <> "ILBURN" _
    And .Value <> "SMOKEA" _
    And .Value <> "ST3" _
    And .Value <> "TA1PED" _
    And .Value <> "UN1" _
    Then _
    Rows(RowToTest).EntireRow.Delete
End With

Next RowToTest

End Sub
Run Code Online (Sandbox Code Playgroud)