5

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

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

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

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

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

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

4

2 回答 2

4

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

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

新名称对话框

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

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

  • 请注意,这仍然算作启用宏的工作簿,但没有 VBA 代码,只是命名范围
于 2012-11-01T20:00:51.577 回答
1

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

你的函数有三个参数:

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

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

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

这会将参数设置为来自所示位置

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

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

您现在可以通过 F 列向下传播公式

=我的功能

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

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

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

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

例如,您经常想在左侧的单元格上执行 udf

因此,一个 udf 给出左侧单元格的立方根将是一个命名公式,如下所示:

立方根 =(RC[-1])^(1/3)

或者在 a1 表格中将光标设置在 B1 中并输入 =(A1)^(1/3) 并且 Excel 会在内部将其转换为 RC 表格

对于三个参数 - 使用三列

它可以工作并且不会遇到有关评估()的波动性问题

是的,我知道这是一个旧帖子,但它可能会帮助遇到同样问题的人。

鲍勃·J。

于 2015-08-22T10:41:33.457 回答