我有一个具有以下结构的长公式:
=IF(!X!<>0,!X!+A1,"")
在那里!X!是一个很长的公式。
有什么解决方法可以避免重复!X!两次?我有两个原因需要它:
- 使公式对工作表的用户可读
- 减少处理时间
感谢您的帮助。
谢谢,迪奥
我有一个具有以下结构的长公式:
=IF(!X!<>0,!X!+A1,"")
在那里!X!是一个很长的公式。
有什么解决方法可以避免重复!X!两次?我有两个原因需要它:
感谢您的帮助。
谢谢,迪奥
Answers:
另一种方法是使用双重反转:
=IFERROR(1/(1/really_long_formula)+A1,"")
如果real_long_formula的计算结果为0,则将除以零并IFERROR()
捕获它!
请注意,处理此要求的常用方法(也是最好的方法)是使用辅助单元。
1/1/x
在Excel中多次测试了100,000个随机数,只有1.4%的时间出现了舍入错误。我曾经发现的最大相对误差是1.6e-16,实际上是零。同样,有趣的是,整数从未显示过舍入错误(测试了从0到1e14的几个范围)。因此,从纯度/清洁度的角度来看,这个答案可能会被拒绝,但从实际计算的角度来看,却不会。
显而易见的答案是将公式放在远离主表的工作单元中。例如,如果您使用H1
,请将其设置为:
=!X!
您的公式将变为:
=IF(H1<>0,H1+A1,"")
这是任何其他编程语言所能做的事情的典型表现。
1/(1/x)
并不总是与完全相同x
),尤其是在处理整数数据时。它也不适用于更广泛的范围(例如,检查小于零)。(评论与@LưuVĩnhPhúc的答案都被接受。)
您是否真的需要结果""
在错误的情况下?如果你只需要在单元格的外观空白(例如,你不会使用像=ISNUMBER()
后来它),你可以使用条件格式隐藏在虚假情况的内容。
您将应用到单元格以使其不显示任何内容的条件格式是自定义格式""
,如下所示(它是葡萄牙语,但您可以理解):
如预期的那样,单元格中的公式将很简单=!X!+A1
。
条件格式设置公式可能是=!X!=0
,但是这将强制重新计算!X!
您不想要的(您的“ Point 2”)。最好利用=B1=A1
(假设我们的单元格为B1)利用单元格本身,这暗示着!X! = 0
。
即使您实际上需要单元格的内容 ""
,通常也可以在工作表中进行一些小的更改,以便可以使用此方法。如果是这样,请在评论中说明情况。
我没有添加帮助列的可能性。不管怎么说,还是要谢谢你。
如果您无法添加帮助器列,为什么不添加整个工作表?这有几个优点:
=IF(X<>0,X+A1,"")
D5
。helper!D5
在主表中对单元格进行寻址。我可以看到的缺点是:
sheetname!D5
而不是D5
。权衡利弊后,我认为对于许多用例来说,这是一个很好的解决方案。在某些情况下,它不是最佳的,尽管我暂时无法想到。
一个尚不建议的选项是创建用户定义的函数。您需要打开菜单栏中的“开发人员”标签(用Google选中)并创建一个模块。
public function udf_myCalc(ValueToAdd as double)
dim myvar as double
dim udf_myCalc as double
myvar = .. put the logic of !X! in here
if myvar<>0 then
udf_myCalc = myvar + ValueToAdd
else
udf_myCalc = ValueToAdd
end if
end function
然后在公式栏中
=udf_myCalc(A1)
注意:现在,该文件将变成.xlsx(带有宏)文件,并且在公司网络中可能需要其他权限,因为宏可用于恶意目的,并且某些电子邮件过滤器会阻止它们。这些函数没有文档说明,因此您需要提供有关函数功能的注释,我发现调用所有函数udf_xxxxx很有用,这样很明显它不是内置函数
还有其他一些带有UDF的GOTCHA。有关一些好的提示,请参见此链接 http://www.decisionmodels.com/calcsecretsj.htm
To reduce the process time
那么显然必须将结果存储在某个位置,否则Excel必须在条件匹配时再次重新计算该值。除法也是一项非常昂贵的行动