【问题标题】:How to make an Excel cell equal to empty, possibly via VBA code如何使 Excel 单元格等于空,可能通过 VBA 代码
【发布时间】:2014-01-07 22:44:38
【问题描述】:

当然,您将使用上述单元格中的="" 公式来回答这个问题,但这不是我的情况。

实际上,我有一个函数在它的参数等于一个空单元格时才起作用,也就是说,一个单元格已被完全擦除,按下del 或类似的东西。

显然,我不能简单地删除单元格的内容,因为它从外部来源获取数据,有时我需要该单元格的内容在我的电子表格中呈现和可见。

当前单元格的公式类似于

=if([condition], "", [formula])

但如果单元格的值等于"" 而不是简单地为空,则该函数不再起作用(相反,如果内容等于[formula],它就可以正常工作)。

不能修改函数,但我可以编写额外的 VBA 代码来实现结果。

根据 Daniel Cook 要求发布我的代码,以下是 QuantLibXLqlFloatingRateBond 函数中的公式:

=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365",,,"obj_0004#008",,,,,,,)

如果你修改它

=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365",0,,"obj_0004#008",,,,,,,)

=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365","",,"obj_0004#008",,,,,,,)

由于提供了错误的参数而导致对象处理程序错误(修改涉及Floors 参数,我希望逗号和空默认参数没有犯任何错误...)。

让它管理没有楼层的绑定的唯一方法是为其提供一个真正的空单元格,但是如果您有一个外部数据源,它根据楼层的存在或不存在在该单元格中返回一些值,您将无法使其工作。

【问题讨论】:

  • 你有机会分享你无法改变的功能吗?甚至可能是它的签名?没有这个,我怀疑是否会有任何有用的答案。
  • 是的,它来自 [quantlib.org/quantlibxl] (QuantLibXL),就是这个:[quantlib.org/quantlibxl/…。真正的函数是用 C++ 编写的,这就是我所知道的一切。
  • 这里有一个更好的方法链接qlFloatingRateBond你是如何调用该方法的?向我们展示您的代码。
  • 是的,就是那个。对不起,我使用 SO 格式不好:)
  • @DanielCook 提供代码。

标签: vba excel


【解决方案1】:

这可能无法解决您的问题,因为我没有 QuantLibXL,但如果您想删除工作表上所有评估为“”的单元格,您可以尝试:

sheet.UsedRange.SpecialCells(xlCellTypeFormulas, 2).Select
Selection.ClearContents

这将找到所有生成文本的公式,然后将其删除。注意:如果没有,这可能会失败,也可能过于激进。

另一个技巧是将公式更改为:

=if([condition], NA(), [formula])

现在,值将是错误(#N/A),而不是空单元格。也许库理解错误而不是 0 或 "" 的值。

如果您想从工作表中删除所有错误,您可以修改上面的 VBA 代码以查找所有导致错误的公式:

sheet.UsedRange.SpecialCells(xlCellTypeFormulas, 16).Select
Selection.ClearContents

同样,如果没有,这将出错。

不是最好的答案,但也许值得深思。

【讨论】:

    【解决方案2】:

    坏消息:你不能。一旦一个单元格包含一个公式,它就永远不会处于真正的空白状态。

    例如将单元格设置为 =A1,您会看到该单元格中将出现 0;即使 A1 本身为空白。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2012-12-19
      • 1970-01-01
      • 2021-10-18
      相关资源
      最近更新 更多