Excel命名函数参数或不带macros的UDF

这似乎有点遗漏,没有简单的方法来创build一个用户定义的声明函数在Excel中没有定义一个macros。 我不能在企业中遇到的艰难战斗中使用XSLM,但是我希望能够用意图来定义一个function。

我想做这个;

=BreakEven(C1:C20) 

但是我不能使用macros,虽然我可以使用“命名公式”。 麻烦的是如何将parameter passing给那个? 我已经看到了一些技巧(kludgy解决方法),但不适用于xslx。

我希望能够在另一个选项卡中定义一个Breakeven()函数,并在这里引用它,超过一个参数,实际上是两个范围。 我敢肯定,有一些使用stringparsing的方式,但我不能看到它。

我不介意这个函数看起来是不是像这样,只要它在单元格内进行评估,我就可以parsing它的“意图”。 例如,我无法在xlsx中工作的这个例子( http://www.jkp-ads.com/articles/ExcelNames09.asp )使用这个语法;

 =IF(ROW(D3),CellColor) 

其中“cellcolor”是函数的名称,D3是范围参数。 另一个解决scheme是使用可变参数列表(这是Excel电子表格的两行)以列格式定义一个函数。

 [Value][function][parameter1][parameter2][parameter3] 24050 BreakEven C1:C20 A1:A20 

这不是很好,但后者的好处是它描述了外部阅读器的function。 我们知道这是一个盈亏平衡函数,而如果我们把实际的公式“OFFSET,INDIRECT,SUM()()()()等”,它将不可读/可parsing。 当然,在这种情况下,我必须通过在Excel中向右分解单元格来构造值域,这将使Value公式变得混乱,但至less它会是一个自描述的行。

任何人都可以提出更好的方法?

不是一个真正的答案,但比在评论中更容易说明。 虽然你不能以简单的方式重新命名公式,但实际上我从来没有想过这个build议。 但是我从来没有在非macros观环境中工作过,所以从未发生过 – 您可以在实际公式中添加注释来解释它的作用。 例如:

 =N("This is a really complex BreakEven Formula")+SUM(3,4,5) 

是一个完全有效的公式。 正如我所说,不是一个真正的答案,但可能会增加一个复杂的公式的清晰度

穷人的UDF

所以我觉得我们要做的就是这个。

  ABCDE 1 [Value][function][parameter1][parameter2][parameter3] 2 24050 BreakEven C1:C20 A1:A20 3 111 mySum 1 10 100 

其中“BreakEven”是一个“命名的function”。 这是“mySum”的公式。

 =sum(C1:E1) 

为了评估B中列出的函数,我们把它放在列A中(对列A中的所有行转换相同的值;

 =value(B) 

这是有效的,因为A2和A3都将B列作为一个值来计算,这导致了BreakEven和Sum在A2和A3的上下文中运行(作为穷人的UDF)。 范围(C1:E1)当然是相对的。

所以实际上,我们可以在列B中写入任何函数名(只要在工作簿中定义了一个相应的命名函数,它可以像你喜欢的那样复杂)。 列C,D和E充当同一行上的函数的参数。

我会喜欢只能在A栏中写下以下内容:

 =mySum(1,10,100) 

但是在没有这种支持的情况下,上面的机制提供了一个可读的参数化函数,用户可以理解,这也是机器可读的(也适用于CSV),并允许我们将可重用函数卸载到库表在维修工作簿的某个地方。

不是完美的,但是可以接受的妥协,除非任何人有一个聪明的方法来做到这一点在一个单元格?

你可以用一个小窍门做到这一点

例如,为了有效地创build一个模拟= cuberoot(x)的cuberoot UDF,然后将一个variables命名为cuberoot,像这样的值。

=(RC [-1])^(1/3)

现在你可以使用临时切换到RC模式来做到这一点,或者把光标放在说单元格E5中,并input名称值=(D5)^(1/3)

现在,无论何时您需要cuberoot,都可以将参数放在任何单元格中,并将单元格放置在右侧。 它真的工作,遵循真正的Excel规则。

我将它用于具有单个“参数”时间作为因variables的多参数模型。 然后我将模型定义为模型方程eg = a + b 时间+ c时间^ 2

其中a,b,c已经被命名为具有唯一参数值的位置 –

然后定义时间为= RC [-1]

我的表中充满了单元格,只是说=模型,并有左边所需的时间值(即他们的论点)。 使用多个单元来扩展到多个arg函数是很简单的。 它通常适合电子表格布局。 在定义名称框中更改一次模型的定义,并同时更改所有位置。

我有一个叫做ToDMS的函数,它在前面的单元格中取小数点的值,并把它转换成deg Min和Secstring – 非常整齐。 你需要度在一个单元格,但希望在ALT中。 在另一个小区中形成

优雅,简单,它的作品

鲍勃·乔丹