当然,您将使用要在上述单元格中编写的=""
公式回答这个问题,但这不是我的情况。
实际上,我有一个函数仅在起作用(如果其参数等于一个空单元格),也就是说,已按del
或诸如此类的东西将其完全擦除的单元格。
显然,我不能简单地擦除单元格的内容,因为它是从外部来源获取数据的,有时我需要在我的电子表格中显示该单元格的内容并使其可见。
当前单元格的公式类似于
=if([condition], "", [formula])
但是,如果单元格的值等于
""
而不是简单地为空,则该函数不再起作用(相反,如果内容等于[formula]
,则可以正常工作)。我不能修改该功能,但是我可以写一个附加的VBA代码来获得结果。
根据Daniel Cook要求发布我的代码的要求,以下是 QuantLibXL 的qlFloatingRateBond函数的公式:
=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
参数,我希望不要对逗号和empty-default参数做任何错误...)。使其管理无底价债券的唯一方法是为其提供一个真正的空单元格,但是如果您有一个外部数据源,该数据源根据是否存在底价而在该单元格中返回一些值,则不会能够使其工作。
最佳答案
这可能无法解决您的问题,因为我没有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
同样,如果没有,这将出错。
不是最好的答案,但也许可以让我们深思。
关于vba - 如何通过VBA代码使Excel单元格等于空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18881053/