我正在遍历一个电子表格,其中包含double
类型形式的价格列。我正在尝试找到一个缺失值,该值在电子表格中显示为"n/a"
,但不允许我将其解释为string
类型。
包含"n/a"
的单元格似乎是integer
类型;我怎么读这个?
答案 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功能的特殊单元格,您可以轻松查看True
或False
在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"; "")
假设每个单元格E1
到E17
包含要检查的每个单元格的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中使用,一些只能用作单元宏功能。