删除不包含string的行

我试图search由另一个模块生成的表,并删除不包含string"REPAIR_RTS" 。 我已经尝试了几个方法从这个网站,但我得到的types不匹配每次我把search值更改为"REPAIR_RTS" (说CASE的行…)。

以下是我最近的尝试。

 Public Sub Test() lastRow = Range("D65000").End(xlUp).row For i = lastRow To 2 Step -1 Select Case Cells(i, 4).Value Case "REPAIR_RTS" 'Do nothing Case Else Cells(i, 8).EntireRow.Delete End Select Next i End Sub 

我还是VBA的新手,所以我在解决这个问题上遇到了很多困难。 我也愿意接受其他方法,因为我在继续进行第一次分析工作时,正尝试学习新的方法。

最简单的方法是首先testing错误

错误…不。

只需将您的Cells(i, 4).Value更改为Cells(i, 4).Text

不过, .Text可能会很痛苦,因为它会返回所显示的内容。

不太容易的是从Cells(i, 4).ValueCStr(Cells(i, 4).Value) 。 但是,它应该做你想要的。

如果您仍然有任何疑问,只要问:D

你不能比较一个错误值(比如#N/A )和一个string – 这就是生成你的“types不匹配”错误的原因。

最简单的方法是首先testing错误,然后继续testing特定的string,如果不是错误:

 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语句中包含testingstring之前的每个错误值的具体testing,例如

 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来testing所有这些。


注意:

这也可以用If语句而不是Select Case语句来完成:

 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