VBA无法判断 #N/A 是否为空值

VBA无法判断 #N/A 是否为空值

img

img


如上图所示,我想数到第一个空格前一共有多少行有内容,可是貌似到#N/A的时候报错了,错误原因是类型不匹配,求指导!

第一个空格上下截图截完整,并且你是刚学vba吗?#N/A本身就是一个特殊错误值,你可以用ierror判断是不是寻到那个位置了,比如

 If IsError(cell.Value) Then
            If cell.Value = CVErr(xlErrNA) Then
              
    这里放#N/A处理逻辑
            End If

引用chatgpt内容作答:
你遇到的问题是因为在VBA中,当单元格包含错误值(例如#N/A)时,试图进行字符串长度(Len)比较会导致类型不匹配的错误。要解决这个问题,你可以使用其他方法来检查单元格是否为空,而不是依赖于字符串长度比较。

以下是修正后的代码示例:

Sub CountNonEmptyCells()
    destination_sheet5.Activate
    
    Dim i As Integer
    i = 2
    
    While Not IsEmpty(destination_sheet5.Range("E" & i).Value)
        i = i + 1
    Wend
    
    MsgBox i - 2 ' Subtract 2 because the loop will increment i one extra time
End Sub

在这个修正后的代码中,我使用了 IsEmpty 函数来检查单元格是否为空。同时,我还在 MsgBox 语句中使用 i - 2 来减去多余的一次循环迭代,因为在找到空单元格后,i 的值会增加一次。这样你就可以得到正确的非空单元格的数量了。

代码改为:

Dim i As Integer
i = 2
While Not IsError(destination_sheet5.Range("E" & i).Value)
    If Len(destination_sheet5.Range("E" & i)) <> 0 Then
    i = i + 1
    End If
Wend
    MsgBox i

参考这几篇文章看看有没有帮助:
https://blog.csdn.net/iamlaosong/article/details/103907131
https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/isnull-function
https://zhidao.baidu.com/question/544909941.html

你看看这种写法,就是把单元格对应的错误名(字符型)找出来,如果找不到,直接返回空字符串。

img

img

VBA判断 #N/A 是否为空值

首先检查错误(N / A值),然后尝试与cvErr()比较。 您正在比较两个不同的东西,一个值和一个错误。 这可能有效,但并非总是如此。 简单地将表达式转换为错误可能会导致类似的问题,因为它不是真正的错误,而只是取决于表达式的错误值。

If IsError(ActiveWorkbook.Sheets("Publish").Range("G4").offset(offsetCount, 0).Value) Then
  If (ActiveWorkbook.Sheets("Publish").Range("G4").offset(offsetCount, 0).Value <> CVErr(xlErrNA)) Then
    'do something
  End If
End If

可以使用 If IsError方法来进行判断,是不是N/A空值。或者使用Application.WorksheetFunction.IsNA()来判断单元格中你的数据值是否为N/A值空值。望采纳哈哈

使用IsError函数检查单元格是否包含错误值。如果包含错误值,使用CVErr函数获取错误值的具体类型

用python。更方便

VBA中返回“#N/A”等Error信息_vba处理#n/a_高级别工具人的博客-CSDN博客 当我们使用Excel的内置函数来返回某个值时,如果参数不对,或是找不到,往往会返回#N/A 或者 #Value!等提示信息。我们在模块中自己编写的VBA代码是否也能返回这些信息呢?答案是肯定的,因为模块中的代码本身就可以在公式里调用,那么自然也可以返回这些信息了。但是,很重要的一点是,这些信息不是文本,而是内置的错误值!下表给出了一些常用的错误值供参考: Con_vba处理#n/a https://blog.csdn.net/bright_chen7/article/details/7229038?ops_request_misc=&request_id=&biz_id=102&utm_term=VBA%E6%97%A0%E6%B3%95%E5%88%A4%E6%96%AD%20&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-7229038.142^v92^controlT0_1&spm=1018.2226.3001.4187

Dim value As Variant
value = WorksheetFunction.VLookup("search_value", Range("A1:B10"), 2, False)

If IsError(value) Then
    ' 判断是否为 #N/A
    If IsNumeric(value) Then
        ' 如果是数字,则不为空值
        MsgBox "不是空值"
    Else
        ' 如果不是数字,则为空值
        MsgBox "是空值"
    End If
Else
    ' 如果不是错误值,则不为空值
    MsgBox "不是空值"
End If