VBA无法判断 #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
你看看这种写法,就是把单元格对应的错误名(字符型)找出来,如果找不到,直接返回空字符串。
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。更方便
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