VBA – 更短的If / Or声明

我一直在寻找一个简短的方法来使用这个If / Or语句,但无济于事。

Sheets("Raw").Select Dim rowCount As Integer, rows As Integer rows = 0 Dim CRC As String rowCount = Range("I2", Range("I2").End(xlDown)).rows.Count For rows = 1 To rowCount Range("I1").Offset(rows, 0).Select CRC = ActiveCell.Value If CRC = "Admin Cancellation" _ Or CRC = "Building sold / Management Co changed" _ Or CRC = "Contract Renewal delayed" _ Or CRC = "System decommissioned" _ Or CRC = "Building demolished" _ Or CRC = "cancelled due to credit hold/risk" Then ActiveCell.rows.EntireRow.Select Selection.Delete Shift:=xlUp rows = rows - 1 rowCount = rowCount - 1 End If Next rows 

提前致谢!

尝试select…案例陈述。

 Dim rws As Long, rcnt As Long, crc As String With Worksheets("Raw") rcnt = .Cells(.Rows.Count, "I").End(xlUp).Row For rws = rcnt To 2 Step -1 Select Case LCase(.Cells(rws, "I").Value2) Case "admin cancellation", "building sold / management co changed", _ "contract renewal delayed", "system decommissioned", _ "building demolished", "cancelled due to credit hold/risk" .Rows(rws).EntireRow.Delete End Select Next rws End With 

删除行时,您应始终从下到上循环,否则当您删除并迭代到下一行时,您可能会跳过一行。 重复使用保留字作为variables名是“不好的做法”。 在For … Next循环中改变迭代variables的值也被认为是“不好的做法”。

  Select Case CRC Case "Admin Cancellation", "Building sold / Management Co changed", _ "Contract Renewal delayed", "System decommissioned", "Building demolished", _ "cancelled due to credit hold/risk" ' do something End Select