エラー値(#N/A
など)を文字列と比較することはできません。つまり、「タイプの不一致」エラーが発生しています。次いで
この周りの最も簡単な方法は、最初のエラーをテストすることであり、それはエラーでない場合に特定の文字列の検査を続行:
Public Sub Test()
Dim lastRow As Long
Dim i As Long
With Worksheets("Chargable Vendors")
lastRow = .Cells(.Rows.Count, "D").End(xlUp).row
For i = lastRow To 2 Step -1
If IsError(.Cells(i, 4).Value) Then
.Rows(i).Delete
Else
Select Case .Cells(i, 4).Value
Case "REPAIR_RTS"
'Do nothing
Case Else
.Rows(i).Delete
End Select
End If
Next i
End With
End Sub
を代替内に含まれることであろうSelect Case
ステートメント、各エラー値の特定のテストより前に文字列のテスト
Select Case .Cells(i, 4).Value
Case CVErr(xlErrNA), CVErr(xlErrDiv0), CVErr(xlErrName), CVErr(xlErrValue) 'etc
.Rows(i).Delete
Case "REPAIR_RTS"
'Do nothing
Case Else
.Rows(i).Delete
End Select
IsError
はすべてをテストする方が簡単です。
注:
これはまたSelect Case
の文ではなく、If
文で行うことができる:
Public Sub Test()
Dim lastRow As Long
Dim i As Long
With Worksheets("Chargable Vendors")
lastRow = .Cells(.Rows.Count, "D").End(xlUp).row
For i = lastRow To 2 Step -1
If IsError(.Cells(i, 4).Value) Then
.Rows(i).Delete
ElseIf .Cells(i, 4).Value <> "REPAIR_RTS" Then
.Rows(i).Delete
End If
Next i
End With
End Sub
これを実行する予定のワークシートをご存知ですか? – Jeeped
フレーズ* ''を含まない行 '*は曖昧です。それは、セル全体の値または長い文字列の一部であることを意味しますか? – Jeeped
クラッシュすると、 'Cells(i、4).Value'の値は何ですか?それは 'Error 2007'や' Error 2042'のようなエラー値ですか? (つまり、D列に '#N/A'、'#DIV/0! 'などの値がありますか?) – YowE3K