在Excel中创build一个自定义函数

这似乎是这样一个明显的事情,Excel 必须有这个function,我只是无法find它。

如何在不使用VBA的情况下创build自定义函数? (VBA太大,造成安全警告等)。

例如,我有一个包含几个非常复杂的公式的电子表格。 这些公式中的每一个都在几列中复制。 每列有数百个条目,所以每一个都被复制数百次。 如果我调整了某些东西,那么我必须手动填充或将我的更改从一列复制到另一列。

一个简单的看起来像这样:
=(支付1 – F $ 12)* 12 +($ D21-H21)
但是我想要做的是:
= MyFunction的(F $ 12 $ D21,H21)
并且只有一次写入“MyFunction”的实际公式。

我已经发现了一些接近给我我想要的东西。 例如,在表中,Excel将自动复制公式中的更改,从而节省了手动select范围并执行“向下填充”的步骤。

它也将允许相对引用closures命名单元格,这似乎等同于用户定义的无参数函数。

如果您可以使用文本创build公式,那么您可以定义一个名称来评估函数。

在单元格A2中,创build一个名称EvalAbove ,并在参考中input=evaluate(A1)

新名称对话框

这样,你可以构造一个公式
例如B1包含SUM ,B2包含=("="&B1&"(A2:A5)")
在B3中,你可以把=EvalAbove

这意味着如果在B1中更改公式名称,则B2将更改为显示更改的公式,而B3将更改为显示结果。

  • 请注意,这仍然是一个启用macros的工作簿,但没有VBA代码,只是命名的范围

如果我正确解释,可以对显示的示例执行此操作。 如果不是的话,你可能可以重新安排一些事情来顺应

你的函数有三个参数:

第一行来自当前行第12行当前行第D行第二行来自当前行右侧第二行我假设Payment1是一个已命名的variables?

在F21中设置光标,然后定义这个名字

MyFunction =(Payment1 – F $ 12)* 12 +($ D21-H21)

这将设置参数来自所示的地方

为了更好地理解这一点,切换到RC模式并input公式:

  =(Payment1 - R12C)*12 + (RC4-RC[+2]) 

你现在可以通过F coloumn传播公式

= MyFunction的

并始终使用相应的F12列Dxx和列Hxx中的值

如果将公式拖到下一列,将使用G12,Dxx和Ixx

如果要更改公式,请在定义名称空间中进行编辑

这是在Excel中不能有非vba UDF规则的一般例外。 通常在Excel中,你想作为函数的“参数”的东西实际上是在相对固定的地方(行或列)。

例如,你经常想在左边的单元格上执行一个udf

所以一个udf给单元格的cuberoot左边将是一个这样的命名公式:

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

或者以a1的forms在B1中设置光标并键入=(A1)^(1/3)然后Excel将其内部转换为RC窗体

对于三个参数 – 使用三列

它的工作原理,并没有遭受波动性问题提到有关评估()

是的,我知道这是一个旧的post,但它可能会帮助有同样问题的人。

鲍勃·J