我有一个非常长的方程。(VLE)。
如果VLE
具有某个属性(A1 = 5, for example)
,
我想取Absolute value of VLE
,而不是只取VLE
。
通常,这看起来像
=if(A1=5, Abs(VLE),VLE)
或者,我会有一个辅助列,
=if(A1=5,ABS(B1),B1)
并参考那里的所有内容。
我想知道是否有一个3rd method
只有VLE written once
并且不使用辅助列的 。
抓取 VLE 的 sumif 是否可以挤进数组(同时已经使用 OR?)有没有办法让数组自引用?或者我只能使用之前提出的两个解决方案之一?
VBA 总是有可能的...但在那时,我宁愿重写一些方程式来防止这种情况发生。
答案1
设C4-D4
为长公式的占位符。然后,如果您可以更改 中的条件A1
,使得A1
始终为 1 或 2,并且 2 表示使用绝对值,则主列公式将只是
=((C4-D4)^$A$1)^(1/$A$1)
。如果 中的条件A1
无法更改,并且您可以保留一个额外的单元格,例如A2
,=1+(A1=5)
则主列公式将是
=((C4-D4)^$A$2)^(1/$A$2)
。否则,您始终可以使用更长的版本
=((C4-D4)^(1+(--($A$1=5))))^(1-(--($A$1=5))/2)
。
但请注意,这可能会导致准确性损失或溢出。
答案2
第三个选项是使用用户定义函数(自定义函数):
Public Function ConditionalAbsolute(v As Variant, boo As Boolean) As Variant
If boo Then
ConditionalAbsolute = Abs(v)
Else
ConditionalAbsolute = v
End If
End Function
例如:
第一个参数是“长公式”;第二个参数是以下表达式:真的或者错误的。
用户定义函数 (UDF) 非常容易安装和使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件另存为.xlsm而不是.xlsx
要删除 UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要从 Excel 使用 UDF:
=CondionalAbsolute(A1+B1,C1=0)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!