这似乎是一个显而易见的事情,excel 必须拥有此功能,我只是找不到它。
如何在不使用VBA的情况下创建自定义功能? (VBA太大了,导致安全警告等)。
例如,我有一个包含几个非常复杂公式的电子表格。这些公式中的每一个都在几列中复制。每列有数百个条目,因此每个条目都会被复制数百次。如果我调整某些内容,那么我必须手动填写或将我的更改从一列复制到另一列。
一个简单的看起来像这样:
=(Payment1 - F $ 12)* 12 +($ D21-H21)
但我想做的是:
= MyFunction的(F $ 12 $ D21,H21)
并且在某个地方只写了一次“MyFunction”的实际公式。
我发现了一些接近给我想要的东西。例如,在表格中,Excel会自动将公式中的更改复制到列的其余部分,从而省去手动选择范围并执行“向下填充”的步骤。
它还允许对命名单元格进行相对引用,这似乎等同于用户定义的无参数函数。
答案 0 :(得分:4)
如果您可以使用文本创建公式,那么您可以定义名称来评估该功能。
在单元格A2中,创建名称 EvalAbove ,然后在“引用至”中输入=evaluate(A1)
这样,你可以构建一个公式
例如B1包含SUM
,B2包含=("="&B1&"(A2:A5)")
然后在B3中,您可以放置=EvalAbove
这意味着如果您更改B1中的公式名称,则B2将更改为显示更改的公式,B3将更改为显示结果。
答案 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。