在Excel中创建自定义函数

在Excel中创建自定义函数,excel,excel-formula,Excel,Excel Formula,这似乎是一件很明显的事情,excel必须有这个功能,我就是找不到它 如何在不使用VBA的情况下创建自定义函数?(VBA的锤子太大,会导致安全警告等) 例如,我有一个电子表格,其中有几个非常复杂的公式。这些公式中的每一个都在几列中复制。每个列都有数百个条目,因此每个条目都会被复制数百次。如果我调整了某些内容,那么我必须手动填写或将更改从一列复制到另一列 一个简单的例子如下: =(付款1-F$12)*12+($D21-H21) 但我想做的是: =MyFunction(f$12、$D21、H21) 在

这似乎是一件很明显的事情,excel必须有这个功能,我就是找不到它

如何在不使用VBA的情况下创建自定义函数?(VBA的锤子太大,会导致安全警告等)

例如,我有一个电子表格,其中有几个非常复杂的公式。这些公式中的每一个都在几列中复制。每个列都有数百个条目,因此每个条目都会被复制数百次。如果我调整了某些内容,那么我必须手动填写或将更改从一列复制到另一列

一个简单的例子如下:
=(付款1-F$12)*12+($D21-H21)
但我想做的是:
=MyFunction(f$12、$D21、H21)
在某个地方写一次“MyFunction”的实际公式

我已经找到了一些能满足我需求的东西。例如,在表格中,Excel将自动将公式中的更改复制到列的其余部分,从而省去手动选择范围并进行“填充”的步骤


它还允许命名单元格的相对引用,这似乎相当于用户定义的无参数函数。

如果可以使用文本创建公式,则可以定义一个名称来计算函数

在单元格A2中,创建一个名称EvalAbove,并在reference中输入
=evaluate(A1)

这样,您就可以构造一个公式
e、 g.B1包含
SUM
,B2包含
=(“=”&B1&“(A2:A5)”)

在B3中,您可以将
=EvalAbove

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

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

如果我解释正确,您可以为您展示的示例执行此操作。 如果不是的话,你可以稍微重新安排一些事情,使之符合要求

您的函数有三个参数:

第一个来自当前列的第12行 当前行D列中的第二个 第三个来自当前行右侧的第二列 我假设Payment1已经是一个命名变量了

在F21中设置光标,然后定义此名称

MyFunction=(付款1-F$12)*12+($D21-H21)

这将设置来自所示位置的参数

为了更好地理解这一点,请切换到RC模式并键入以下公式:

 =(Payment1 - R12C)*12 + (RC4-RC[+2])
现在可以通过F列向下传播公式

=MyFunction

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

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

如果要更改公式,请在“定义名称”空间中编辑它

这是Excel中不能有非vba自定义项规则的一般例外。通常,在Excel中,您希望作为函数“参数”的内容实际上位于可以相对寻址的固定位置(行或列)

例如,您经常希望在左侧的单元格上执行自定义项

因此,一个udf给出了左边单元格的立方体,它是一个命名公式,如下所示:

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

或者在a1格式中,将光标设置在B1中,类型=(a1)^(1/3) Excel将在内部将其转换为RC表单

对于三个参数-使用三列

它可以正常工作,并且不会遇到evaluate()中提到的波动性问题

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


Bob J.

是一个很好的教程。然而,不能逃避VBA,我同意这一点:“创建UDF需要使用VBA,这是没有办法的。”(用户定义函数)[您可以在定义的名称中集成函数,但它们不带参数。但是,您可以在命名范围中集成大多数运算符、函数以及相对地址和绝对地址。谢谢。这很有效,但我发现“B3”除非我编辑B3,否则不会刷新。如果我更改A2:A5范围内的数据,B3中的总和将不会更新,即使我在数据中单击“全部刷新”。编辑B3(不更改)会使其刷新。