我经常会在一个单元格中编写一个函数,然后将其复制到多个单元格中。然后,这些副本会引用它们自己的正确行。但如果我在第一个单元格中更改函数,副本不会受到影响。我必须用新副本替换所有副本。这就是复制粘贴编程,而我真正想要的是在一个地方编写一个函数,然后称呼该功能就像是一份副本来自一群下属细胞。
是否有一种技术可以实现这一点,或者我对电子表格编程模型的期望太高了?
答案1
您可以使用 StarBasic/LibreOffice Basic 或 Python 编写自己的函数。这非常简单,并且可以更新影响使用该公式的所有单元格的函数。
正如所描述的此处(由 Louic 的博客提供),只需执行以下操作:
- 转到工具->宏->组织宏->Libreoffice Basic;
- 选择模块1;
- 点击编辑;
- 输入功能代码,例如:
Function Area(width, height) Area = width * height End Function
现在,您可以=AREA(arg; arg2)
在电子表格中使用。如果您更改结果的计算方式,这会影响所有出现的=AREA()
。
编辑
如果您不想将宏放入 LO 安装的中央宏存储库,则可以将其保存在 ods 文件中。因此,也可以在其他 PC 上访问它。为此,只需在创建宏时选择当前文件作为保存宏的位置(上面的第 1 步):
答案2
一个简单的解决方案,无需宏:只需将变量参数放入单独的单元格中。因此,
=IF(MOD(A2,30)=19,Strings.$A$1,"")
(使用值30
和19
固定值),只需将其替换为
=IF(MOD(A2,$E$1)=$E$2,Strings.$A$1,"")
并将值30
和19
分别放入单元格 E1 和 E2。现在,如果您更改 E1 和/或 E2,则每个公式都将使用这些值。
如果你需要经常应用这两个值的某些组合,你可以定义场景因此
答案3
您可以创建一个比较函数单元并从其他函数中引用该单元。
假设您在 A10 中创建此函数,那么 A10 将如下所示:
=如果(MOD(A2,30)=19,1,0)
现在,如果你在 A11 中执行其他函数,通常你的函数如下所示:=IF(MOD(A2,30)=19,Strings.$A$1,"")
现在它看起来像这样:=if(A10=1,Strings.$A$1,"")
如果您需要更改比较部分,请更改 A10,它会更新所有引用它的单元格。