如何使Excel单元格等于空,可能通过VBA代码

当然你会用=""公式来回答这个问题,写在上面的单元格中,但这不是我的情况。

实际上,我有一个函数, 只有当它的参数等于一个空单元格,也就是已经被完全删除的单元格,或者按下了这个单元格时,它才起作用。

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

当前单元格的公式是类似的

 =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参数,我希望没有用逗号和空默认参数做任何错误…)。

让它在没有地板的情况下pipe理债券的唯一方法是给它提供一个真实的空单元格,但是如果你有一个外部数据源根据是否存在地板返回那个单元格中的某个值,那么你将不会能够使其工作。

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

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

这将find所有的公式,导致文本,然后删除它们。 注意:这可能会失败,如果没有,也可能太过分。

另一个诀窍是改变你的公式为:

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

现在,而不是空单元格,值将是一个错误(#N / A)。 也许图书馆了解错误而不是0或“”的值。

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

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

再次,如果没有,这将是错误的。

不是最好的答案,但也许是一些思考的食物。

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

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