在Excel中创建自定义函数

时间:2012-11-01 16:32:57

标签: excel excel-formula

这似乎是一个显而易见的事情,excel 必须拥有此功能,我只是找不到它。

如何在不使用VBA的情况下创建自定义功能? (VBA太大了,导致安全警告等)。

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

一个简单的看起来像这样:
    =(Payment1 - F $ 12)* 12 +($ D21-H21)
但我想做的是:
    = MyFunction的(F $ 12 $ D21,H21)
并且在某个地方只写了一次“MyFunction”的实际公式。

我发现了一些接近给我想要的东西。例如,在表格中,Excel会自动将公式中的更改复制到列的其余部分,从而省去手动选择范围并执行“向下填充”的步骤。

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

2 个答案:

答案 0 :(得分:4)

如果您可以使用文本创建公式,那么您可以定义名称来评估该功能。

在单元格A2中,创建名称 EvalAbove ,然后在“引用至”中输入=evaluate(A1)

New Name dialog box

这样,你可以构建一个公式
例如B1包含SUM,B2包含=("="&B1&"(A2:A5)")
然后在B3中,您可以放置​​=EvalAbove

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

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

答案 1 :(得分:1)

如果我正确解释,您可以为您显示的示例执行此操作。 如果不是,您可以稍微重新排列以符合

你的功能有三个参数:

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

将光标设置为F21,然后定义此名称

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

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

要理解这一点,最好切换到RC模式并输入公式:

 =(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形式将光标设置为B1并输入=(A1)^(1/3) Excel将内部转换为RC表单

对于三个参数 - 使用三列

它有效且不会遇到有关evaluate()

的波动性问题

是的我知道这是一个旧帖子,但它可以帮助有同样问题的人。

Bob J。