我正在尝试使用此代码替换上一个操作中命名区域中的#N / A值:
For Each cl In m
If cl.Value = "#N/A" Then
Set cl.Value = 0
End If
Next cl
但是这给了我垃圾输出。 我做错了什么?
答案 0 :(得分:2)
检查错误的方法是使用IsError()
功能。变量值不会包含字符串" #N / A"虽然单元格的.Text
值会(但只有当单元格宽度足够大时)。所以IsError
是一个更安全的赌注。一旦您确定您的单元格包含错误,您的下一个任务就是使用CVErr()
函数查找哪个单元格。为了完整起见,我在下面的示例代码中包含了所有错误(有关函数的说明,请访问:https://msdn.microsoft.com/en-us/library/bb211091(v=office.12).aspx。
Dim cell As Range
Dim v As Variant
Set cell = Sheet1.Range("A1")
v = cell.Value
If IsError(v) Then
Select Case v
Case CVErr(xlErrDiv0)
Case CVErr(xlErrNA)
cell.Value = 0
Case CVErr(xlErrName)
Case CVErr(xlErrNull)
Case CVErr(xlErrNum)
Case CVErr(xlErrRef)
Case CVErr(xlErrValue)
Case Else
End Select
End If
答案 1 :(得分:1)
一些选择。
将所有内容保存在工作表中(从那时起,我最喜欢的就是在VBA层中隐藏了关键功能)。使用公式=IFNA(A1, 0)
,其中A1包含要测试的单元格,或者在旧版本的Excel中使用=IF(ISNA(A1), 0, A1)
。
使用VBA。如果v
是包含单元格值的Variant
,请使用
If IsError(v) Then
If v = CVErr(xlErrNA) Then
'Set the cell to 0
End If
End If
您需要嵌套块的位置,因为VBA不支持短路And
,并且对等式=
的测试可能会导致某些变体类型出错。
使用可以说是最清晰的
If Excel.WorksheetFunction.IsNA(v)
作为针对此使用VBA解决方案的最后警示性评论,请注意(2)和(3)倾向于删除其参数取决于值设置为#N/A
的单元格为#N/A
的公式倾向于通过大多数内置的Excel函数传播。
答案 2 :(得分:1)
更简单的版本:
'Set range to whatever you like
Dim rng As Range
Set rng = Worksheets(1).Range("A1:A2")
'Loop all the cells in range
For Each cell In rng
If Application.WorksheetFunction.IsNA(cell) Then
'If cell contains #N/A, then set the value to 0
cell.value = 0
End If
Next
答案 3 :(得分:-1)
您可以尝试这样的代码......
For Each cl In m
If IsError(cl) Then
cl.Value = 0
End If
Next cl