Excel VBA – 解释“不适用”值
我正在遍历一个包含价格列的电子表格,其格式为double
types。 我试图find一个电子表格中显示的缺失值为"n/a"
,但它不让我把它解释为一个string
types。
包含"n/a"
的单元格似乎是一个integer
types; 我怎么读这个?
包含#N / A的单元格作为包含错误代码的变体由VBA检索
一般来说,通常最好将Excel单元格分配给variables,因为单元格可以包含数字(双精度),逻辑,string或错误,并且不能预先告知单元格所包含的内容。
如果你想要做的只是检查错误值,那么:
Application.WorksheetFunction.IsNA(rngToCheck.Value)
其中rngToCheck
是您要检查rngToCheck
#N/A
错误值的单元格
(这里有一个可以从Excel VBA调用的工作表函数列表)
您也可以检查rngToCheck.Text
因为这将包含string“ rngToCheck.Text
/ A”
相反,如果你想读取产生rngToCheck.Formula
#N/A
的单元格中的公式,那么rngToCheck.Formula
会做到这一点
您可以按照下文所述准备您想要检查的电子表格,并对包含ISfunction的特殊单元格进行评估,在VBA中检查True
或False
很容易。 或者,您可以编写自己的VBA函数,如下所示。
有Excel函数检查单元格的特殊值,例如:
=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)
您可以通过右键单击列并隐藏 Excel的上下文菜单中隐藏栏E
,以便电子表格的用户不能看到此列。 他们仍然可以访问和评估,即使他们是隐藏的。
在VBA中,您可以将范围对象作为RANGE
parameter passing,并使用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
。 您必须将工作簿保存为已启用macros的工作簿(扩展名XLSM
),并确保未禁用macros。
Excel提供了更多的function,如上所述:
ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(), ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT()
例如, ISERR()
检查除ISERR()
#N/A
以外的所有单元错误,并且可用于检测计算错误。
所有这些function都在Excel的内置帮助中描述(按F1,然后input“IS Functions”作为search文本以获得解释)。 其中有些可以在VBA中使用,有些只能用作macros单元的一个macrosfunction。