2017-08-02 4 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 
関連する問題