Excel VBA – 解释“不适用”值

我正在遍历一个包含价格列的电子表格,其格式为doubletypes。 我试图find一个电子表格中显示的缺失值为"n/a" ,但它不让我把它解释为一个stringtypes。

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

包含#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中检查TrueFalse很容易。 或者,您可以编写自己的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"; "") 

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

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

您可以通过右键单击列并隐藏 Excel的上下文菜单中隐藏栏E ,以便电子表格的用户不能看到此列。 他们仍然可以访问和评估,即使他们是隐藏的。


VBA中,您可以将范围对象作为RANGEparameter 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。