使用#N / A的IF语句?

时间:2013-07-05 19:28:30

标签: excel vba if-statement

目前有一个宏,其中有很多if语句遍历每一行并测试某些条件。需要添加到每个if语句的条件之一如下:如果c1(我将Dim'd作为范围)=“#N / A”)。在询问了几个人之后,我终于在我的每个if语句之前添加了正确的代码行作为另一个条件:

  If CVErr(cl.Value) = CVErr(xlErrNA) And 

不幸的是,当cl.Value不是“#N / A”时,这种情况一直在搞乱。我想看看是否有办法可以启动宏,例如Do While或通过测试来查看cl.Value是否为“#N / A”以及是否通过所有其他IF声明,如果没有去下一个单元格。请指教。谢谢你的帮助。

这里只是一个简单的例子/偷看4 If语句我添加了上面的行来测试“#N / A”,这会引起错误(说13:类型不匹配)。

For Each cl In range("A2", range("A" & Rows.count).End(xlUp))


 If CVErr(cl.Value) = CVErr(xlErrNA) And _
 cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 2).Value Like "*CLO*" Then
        cl.Value = "CLO"
 End If

 If CVErr(cl.Value) = CVErr(xlErrNA) And cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 12).Value Like "BCC*" Then
        c1.Value = "CLO"
 End If

 If CVErr(cl.Value) = CVErr(xlErrNA) And _
 cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 14).Value Like "*CLO*" Then
        c1.Value = "CLO"
 End If

 If CVErr(cl.Value) = CVErr(xlErrNA) And _
 cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 15).Value Like "*CLO*" Then
        c1.Value = "CLO"
 End If

1 个答案:

答案 0 :(得分:1)

#N/A是工作表中的特殊错误值,而不是字符串。

您可以使用以下方法对其进行测试:

If WorksheetFunction.Iserror(cl.Offset(0, 0).Value) ...

对于任何错误,它将返回TRUE。如果您想专门针对#N/A进行测试,请使用ISNA(...)函数执行相同的操作。

关于您修改过的问题,如果我理解正确,为什么不能将您的其他IF包含在NA IF中?

For ...
    If (CVErr(cl..Value)  eq CVErr(xlErrNA) Then
        If .... Then
            do_something
        End If
        If .... Then
            do_another_thing
        End If
    End If
Next

请注意,代码草图第二行的 eq 应为等号。我在手机上写了这个,没有那把钥匙:(