【问题标题】:Excel VBA to generate #N/A error on sheetExcel VBA 在工作表上生成 #N/A 错误
【发布时间】:2019-11-20 11:23:53
【问题描述】:

我有一个IF(Test1>0, Test1, NA()) 的工作表公式,旨在在不满足条件时在工作表中放置一个“受控”#N/A。同样,我在同一张表的其他地方使用IFERROR(Test2,NA())

由于 Testn 的公式很长,我想将它们放入 UDF 但找不到生成“受控”#N/A 错误的方法(一个不是绿色- 在工作表上标记为错误)。

到目前为止,我已经做到了:

Function GTZero(sngInput As Single) As Variant

    If sngInput > 0 Then GTZero = sngInput Else GTZero = CVErr(xlErrNA)

End Function

然后在工作表中将其称为=GTZero(Test1)。答案看起来正确,但 Excel 将其标记为真正的错误。我不想只使用“#N/A”文本,因为我需要在图表中使用结果并希望跳过 #N/As

【问题讨论】:

  • 据我所知,你不能。如果您打开了错误检查选项,任何返回 #N/A 而非 NA() 的函数都会被标记。
  • 你为什么不用=IFERROR(GTZero(Test1),NA())?如果您要做的只是计算一次Test1,这应该适合您。
  • 不返回#N/A,而是返回一个“BLANK CELL”,如HERE 所示。当我说“BLANK CELL”时,我并不是指"",因为它会被绘制在图表中。也可以右击Chart | Select Data | Hidden and Empty Cells | Show Empty Cell as "Connect data points with line"This 再次在折线图上进行测试。
  • 顺便说一句,我指的是上面链接中的Przemyslaw Remin答案
  • 我最初的假设是“Test1”是一个命名范围。但是,“由于 Testn 的公式很长”这句话让我有些怀疑。调用函数时,Test1 是如何真正表示的?因为否则你的代码看起来很好。

标签: excel vba user-defined-functions


【解决方案1】:

这似乎是不可能的。我尝试将=NA() 或只是#N/A 作为字符串放在一个单元格中,并从UDF 返回对该单元格的引用。我还尝试定义一个引用 =NA() 的名称并返回该名称,但没有任何效果。
support.office.com

注意:如果您直接在单元格中输入错误值,则会将其存储为该错误值,但不会标记为错误。但是,如果另一个单元格中的公式引用了该单元格,则该公式会返回该单元格中的错误值。

【讨论】:

  • 看来你是对的。我认为您对=IFERROR(GTZero(Test1),NA()) 的建议可能会成为可行的方法。要么这样,要么与/'忽略标志一起生活。
【解决方案2】:

不需要 VBA。您可以使用公式来完成此技巧:

e^(ln(whatever)) 总是返回 whatever 因为 e^ln() 是反函数。

除了……ln()对负数和0无实解,导致Excel报错,正是你想要的。

所以你可以这样做:

= IFERROR(EXP(LN(Test1)),NA())

与您的公式相同,除了 Test1 只出现一次。

请参见下面的工作示例。 B1 中的公式被下拉。

【讨论】:

  • 感谢@ImaginaryHuman。这是一个非常优雅的解决方案,我明白了,但我有点担心有人稍后会出现并被 EXP 和 LN 担心!
  • 这似乎是一个不做某事的愚蠢理由……但没关系。无论如何,如果它们对您有所帮助,您应该将其中一个答案标记为正确。
  • 一个想法 - 也可以使用=IFERROR(Test1^1,NA()) 来给出相同的结果?
  • @ChemEnger 否...(任何数字)^1 始终被定义,即使对于负数也是如此。这无济于事。自己试试吧。 (-1)^1 在 Excel 中仍返回 (-1)。
猜你喜欢
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多