我有一个长公式,其结构如下:
=IF(!X!<>0,!X!+A1,"")
在哪里!X!是一个非常长的公式。
有什么解决方案可以避免重复 !X! 两次?我需要它有两个原因:
- 使表格用户能够阅读公式
- 减少处理时间
我感谢任何帮助。
谢谢,Dio
答案1
另一种方法是使用双重倒置:
=IFERROR(1/(1/really_long_formula)+A1,"")
如果非常长的公式评估结果为0,你将得到一个除以零的结果,并且IFERROR()
会捕获它!
请注意,通常的方式(也是最好的方法)处理这个要求需要用到辅助细胞。
答案2
显而易见的答案是将公式放在远离主表的工作单元格中。例如,如果您使用H1
,请将其设置为:
=!X!
你的公式就变成:
=IF(H1<>0,H1+A1,"")
这在其他任何编程语言中都是很典型的做法。
答案3
你真的需要结果为""
false 吗?如果你只需要单元格看=ISNUMBER()
空白(例如你以后不会使用类似的东西),你可以使用条件格式以虚假的手段掩盖其内容。
您将应用于单元格的条件格式,以便它不会显示任何事物是自定义格式""
,如下所示(它是葡萄牙语,但你明白我的意思):
正如预期的那样,单元格中的公式将简单如是=!X!+A1
。
条件格式公式可以是=!X!=0
,但这会迫使重新计算!X!
,而这并不是你想要的(你的“第 2 点”)。最好通过使用来控制细胞本身=B1=A1
(假设我们的细胞是B1)——这意味着!X! = 0
。
即使你需要单元格内容实际上是 ""
,通常可以在工作表中进行微小的改动,以便使用此方法。如果是这种情况,请留下评论描述情况。
答案4
尚未建议的一个选项是创建用户定义函数。您需要打开菜单栏中的“开发人员”选项卡(谷歌搜索)并创建一个模块。
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 还存在其他一些问题。请参阅此链接获取一些有用的提示 http://www.decisionmodels.com/calcsecretsj.htm