Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-解释“;不适用;价值观_Vba_Types_Excel - Fatal编程技术网

Excel VBA-解释“;不适用;价值观

Excel VBA-解释“;不适用;价值观,vba,types,excel,Vba,Types,Excel,我正在浏览一个电子表格,其中包含一列价格,格式为double类型。我试图找到一个缺失的值,该值在电子表格上显示为“n/a”,但它不允许我将其解释为字符串类型 包含“n/a”的单元格似乎是整数类型;如何读取此信息?VBA将包含#N/A的单元格作为包含错误代码的变量检索 通常,最好将Excel单元格分配给变量,因为单元格可以包含数字(双精度)、逻辑、字符串或错误,并且您无法提前知道单元格将包含什么。如果您只想检查错误值,则: Application.WorksheetFunction.IsNA(rn

我正在浏览一个电子表格,其中包含一列价格,格式为
double
类型。我试图找到一个缺失的值,该值在电子表格上显示为
“n/a”
,但它不允许我将其解释为
字符串类型

包含
“n/a”
的单元格似乎是
整数类型;如何读取此信息?

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


通常,最好将Excel单元格分配给变量,因为单元格可以包含数字(双精度)、逻辑、字符串或错误,并且您无法提前知道单元格将包含什么。

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

Application.WorksheetFunction.IsNA(rngToCheck.Value)

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

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

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


相反,如果您想读取生成
#N/A
的单元格中的公式,则
rngToCheck.formula
将执行此操作

您可以按如下所述准备要检查的电子表格,并评估包含IS函数的特殊单元格,在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
参数传递,并使用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内部使用,有些只能用作单元格宏函数。

当您遇到一个带有“n/a”的调用时,您到底想做什么?我不知道你说的“我怎么能读这个”是什么意思?或者您只是想检查单元格是否包含缺少的值?
rngToCheck.Text
是解决此问题的方法。