2017-08-02 74 views
1

我一直在尋找使用此If/Or語句的更短的方法,但無濟於事。VBA - 更短的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 

在此先感謝!

+1

當您迭代行並刪除行時...您想從下往上....不是自上而下。 – Rdster

回答

3

嘗試選擇...案例陳述。

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 

應始終從底部循環中刪除行,當頂部或你可能跳過一個,當你刪除和迭代到下一行。重複使用保留字作爲變量名是'壞習慣'。在For ... Next循環中改變迭代變量的值也被認爲是「不好的做法」。

+0

謝謝@Jeeped,它的工作非常好 –

2
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