我正在遍历一个电子表格,其中包含一列以double
类型表示的价格。我试图找到一个在电子表格上显示为"n/a"
的缺失值,但它不允许我将其解释为string
类型。
包含"n/a"
的单元格似乎是integer
类型;我如何读取它?
发布于 2011-01-07 11:18:07
VBA将包含#N/A的单元格作为包含错误代码的变体进行检索
一般来说,最好的做法是将Excel单元格分配给变量,因为单元格可以包含数字(双精度)、逻辑、字符串或错误,而您无法预先知道单元格将包含什么。
发布于 2011-01-11 01:32:03
如果您要做的只是检查错误值,那么:
Application.WorksheetFunction.IsNA(rngToCheck.Value)
其中,rngToCheck
是要检查#N/A
错误值的单元格
(这里有一个可从Excel VBA here调用的工作表函数列表)
您还可以检查rngToCheck.Text
,因为它将包含字符串"#N/A“
相反,如果您希望读取生成#N/A
的单元格中的公式,那么rngToCheck.Formula
将执行此操作
发布于 2013-01-29 08:39:57
你可以准备你想要检查的电子表格,如下所述,并评估包含IS函数的特殊单元格,很容易在VBA中检查它们的True
或False
。或者,您可以编写自己的VBA函数,如下所示。
有一些Excel functions可以检查特殊值的单元格,例如:
=ISNA(C1)
(假设C1是要检查的单元格)。如果单元格为#N/A
,则返回True
,否则返回False
。
如果您想要显示单元格的范围(比如"C1:C17
")是否有任何包含#N/A
的单元格,使用以下命令可能是明智的:
=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)
您可以通过在列上单击鼠标右键并选择E
上下文菜单中的隐藏来隐藏列,这样电子表格的用户就看不到此列。它们仍然可以被访问和评估,即使它们是隐藏的。
在VBA中,您可以将range对象作为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)
如果任何单元格为#N/A
,则返回True
,否则返回False
。必须将工作簿另存为启用宏的工作簿(扩展名XLSM
),并确保宏未被禁用。
Excel提供了更多类似上述功能:
ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(),
ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT()
例如,ISERR()
检查除#N/A
之外的所有单元格错误,并可用于检测计算错误。
所有这些功能都在Excel的内置帮助中进行了描述(按F1,然后输入"IS Functions“作为搜索文本以获取解释)。它们中的一些可以在VBA中使用,一些只能用作单元格宏函数。
https://stackoverflow.com/questions/4624861
复制相似问题