Excel VBA - 解释“N / A”值

时间:2011-01-07 11:10:35

标签: excel vba types excel-vba

我正在遍历一个电子表格,其中包含double类型形式的价格列。我正在尝试找到一个缺失值,该值在电子表格中显示为"n/a",但不允许我将其解释为string类型。

包含"n/a"的单元格似乎是integer类型;我怎么读这个?

3 个答案:

答案 0 :(得分:10)

如果您只想检查错误值,那么:

Application.WorksheetFunction.IsNA(rngToCheck.Value)

其中rngToCheck是您要检查#N/A错误值的单元格

(有一个可以从Excel VBA here调用的工作表函数列表)

您还可以检查rngToCheck.Text,因为它将包含字符串“#N / A”

相反,如果您想要在生成#N/A的单元格中阅读公式,那么rngToCheck.Formula会这样做

答案 1 :(得分:6)

VBA检索包含#N / A的单元格作为包含错误代码

的变体

通常,最好将Excel单元格分配给变体,因为单元格可以包含数字(双精度),逻辑,字符串或错误,并且您无法预先告知单元格将包含哪些内容。

答案 2 :(得分:4)

您可以按照以下说明准备要检查的电子表格,并评估包含 IS功能的特殊单元格,您可以轻松查看TrueFalse在VBA中。或者,您可以编写自己的VBA函数,如下所示。


Excel函数,用于检查单元格的特殊值,例如:

=ISNA(C1)

(假设C1是要检查的单元格)。如果单元格为True,则会返回#N/A,否则为False

如果您想显示范围的细胞(例如“C1:C17”)是否包含任何包含#N/A的单元格,那么使用它可能看起来很合理: / p>

=if(ISNA(C1:C17); "There are #N/A's in one of the cells"; "")

可悲的是,不是这种情况,它不会按预期工作。您只能评估单个单元格。

但是,您可以使用

间接
=if(COUNTIF(E1:E17;TRUE)>0; "There are #N/A's in one of the cells"; "")

假设每个单元格E1E17包含要检查的每个单元格的ISNA公式:

=ISNA(C1)
=ISNA(C2)
...
=ISNA(C17)

您可以通过右键单击列并在Excel的上下文菜单中选择隐藏来隐藏列E,这样电子表格的用户就无法看到此列。即使它们被隐藏,它们仍然可以被访问和评估。


VBA 中,您可以将范围对象作为RANGE参数传递,并使用FOR循环单独评估值:

Public Function checkCells(Rg As Range) As Boolean
    Dim result As Boolean
    result = False
    For Each r In Rg
        If Application.WorksheetFunction.IsNA(r) Then
            result = True
            Exit For
        End If
    Next
    checkCells = result
End Function

此函数在内部使用IsNA()函数。它必须放在一个模块中,然后可以在电子表格中使用,如:

=checkCells(A1:E5)

如果任何单元格为True,则返回#N/A,否则为False。您必须将工作簿保存为启用宏的工作簿(扩展名XLSM),并确保未禁用宏。


Excel 提供了更多功能,如上所述:

ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(), 
ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT()

例如,ISERR()检查除#N/A以外的所有单元格错误,并且对检测计算错误很有用。

所有这些功能都在Excel的内置帮助中进行了描述(按F1然后输入“IS Functions”作为搜索文本以获得解释)。其中一些可以在VBA中使用,一些只能用作单元宏功能。