6

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

实际上,我有一个函数,只有当它的参数等于一个空单元格时才有效,也就是说,一个单元格已经被完全擦除,按下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参数的,我希望逗号和空默认参数没有犯任何错误......)。

使其管理没有地板的债券的唯一方法是为其提供一个真正的空单元格,但如果您有一个外部数据源,它根据地板的存在或不存在在该单元格中返回一些值,您将不会能够使它工作。

4

2 回答 2

5

这可能无法解决您的问题,因为我没有 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

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

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

于 2013-09-18T21:33:29.007 回答
4

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

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

于 2013-09-18T19:51:56.677 回答