cir*_*rus 5 excel function excel-formula
在没有定义宏的情况下,在Excel中创建用户定义的声明函数没有简单的方法,这似乎有点遗漏.我不能将XSLM用于企业中需要的艰苦战斗,但我希望能够有意义地定义一个功能.
我想做这个;
=BreakEven(C1:C20)
Run Code Online (Sandbox Code Playgroud)
但我不能使用宏,虽然我可以使用"命名公式".问题是如何传递参数?我已经看过几个技巧(kludgy workarounds)但不适用于xslx.
我希望能够在另一个选项卡中定义一个Breakeven()函数,并在此处引用它传递多于一个参数,实际上是两个范围.我确定有一些方法使用字符串解析但我看不到它.
我不介意函数看起来是不是那样,只要它在单元格内进行求值,我就可以解析它为'intent'.例如,我在xlsx中无法使用的示例(http://www.jkp-ads.com/articles/ExcelNames09.asp)使用此语法;
=IF(ROW(D3),CellColor)
Run Code Online (Sandbox Code Playgroud)
其中"cellcolor"是函数的名称,D3是范围参数.我正在使用的另一个解决方案是使用可变参数列表(这是excel电子表格的两行)以列格式定义函数;
[Value][function][parameter1][parameter2][parameter3]
24050 BreakEven C1:C20 A1:A20
Run Code Online (Sandbox Code Playgroud)
它并不漂亮,但后者的好处是它向外部读者描述了这个功能.我们知道它是一个盈亏平衡函数,而如果我们把实际的公式"OFFSET,INDIRECT,SUM()()()()等",它就不会是可读/可解析的.当然,在这种情况下,我必须通过在Excel中向右解析单元格来构造值字段,这会使Value公式变得混乱,但至少它将是一个自描述的行.
有谁能建议更好的方法?
所以我认为我们要做的是:
A B C D E
1 [Value][function][parameter1][parameter2][parameter3]
2 24050 BreakEven C1:C20 A1:A20
3 111 mySum 1 10 100
Run Code Online (Sandbox Code Playgroud)
其中“BreakEven”是“命名函数”。这是“mySum”的公式;
=sum(C1:E1)
Run Code Online (Sandbox Code Playgroud)
为了计算 B 中列出的函数,我们只需将其放入 A 列中(对 A 列中的所有行转置相同的值;
=value(B)
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为 A2 和 A3 都将 B 列评估为值,这会导致 BreakEven 和 Sum 在 A2 和 A3 的上下文中运行(作为穷人的 UDF)。当然,范围(C1:E1)是相对的。
因此,实际上,我们可以在 B 列中写入任何函数名称(只要工作簿中定义了相应的命名函数,该函数可以是任意复杂的)。C、D 和 E 列充当同一行上函数的参数。
我本来希望能够在 A 栏中写下以下内容;
=mySum(1,10,100)
Run Code Online (Sandbox Code Playgroud)
但在缺乏这种支持的情况下,上述机制可以提供用户可以理解的可读参数化函数,它也是机器可读的(也可以在 CSV 中工作),并允许我们将可重用函数卸载到库表中工作簿中的某处进行维护。
虽然不完美,但这是一个可以接受的妥协,除非有人有一个聪明的方法在单个单元格中做到这一点?