=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),-4,2+MATCH(MIN(OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,3,1,10)), OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,3,1,10), 0),1,1)
在上面的示例中(不考虑它的作用),我必须对完全相同的表达式进行两次评估:OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,3,1,10)
有没有办法在公式中动态添加变量?那么我们存储一次结果,然后在公式中简单地引用它?这是一个例子,其中几次相同的计算成本没有影响,但更昂贵的调用或计算呢?
我正在考虑递归函数语言中存在的一些功能,例如Caml。
答案 0 :(得分:2)
您可以使用简单的相对单元格引用替换间接(地址(row(),Column()),但要回答您的问题:
是的,可以使用Laurent Longre的MOREFUNC插件 - 它具有完全符合你想要的功能SETV和GETV。
答案 1 :(得分:2)
如果您的问题与编写公式的便利性有关,那么名称管理器就是您所需要的。请参见“公式”选项卡中的功能区菜单。点击“新”
姓名:MyArray
范围:工作簿
指:= OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,3,1,10)
如果您的问题与计算成本有关,我相信您唯一的解决方案是将中间结果实际存储在附加列或单独的工作表中。
答案 2 :(得分:1)
9 年后,这是可能的!
如果你有 Microsoft 365,你可以使用“LET”来定义一个临时变量。
例如 =LET(MyTempVar, 2, MyTempVar + 3) 是一种非常糟糕的计算 2 + 3 = 5 的方法。
在你的情况下,你会这样做
=LET(MyTempVar, OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,3,1,10), 公式)