有没有办法自动运行一次公式?

时间:2021-04-29 22:57:44

标签: google-sheets google-sheets-formula

假设我有一张桌子:

<头>
数量 项目 价值 获取的项目 建议
5 变量 ...

Value 列中的单元格有一个 VLOOKUP 公式,用于获取与“Item”同名的项目的值,如果不合适则返回“Variable”(这意味着有多个选项)。 Suggestion 列中的 Cells 有一个 VLOOKUP 公式,用于获取与“Item”同名的类别中价值最低的项目,如果没有这样的类别,则返回“”(这意味着该项目会在值列的搜索)。搜索后,表格如下所示:

<头>
数量 项目 价值 获取的项目 建议
5 变量 牛肉

现在,不会使用 D 列和 E 列,因此用户将 B 列更改为包含建议的项目。

<头>
数量 项目 价值 获取的项目 建议
5 牛肉 300 牛肉

所以我不希望用户必须将“肉”放在“获取的项目”列中才能使其工作,所以假设该列只有一个简单的 =B2 公式。工作表现在看起来像这样:

<头>
数量 项目 价值 获取的项目 建议
5 牛肉 300 牛肉

但是,建议公式引用的表会定期更新值,因此现在牛肉比猪肉贵。我希望表格看起来像这样:

<头>
数量 项目 价值 获取的项目 建议
5 牛肉 300 猪肉

这样,用户可以相应地更新 B 列。这意味着我需要某种方式让 D 列自动复制 B 列的内容 如果 C 列读取“变量”,同时忽略 B 列的未来更改。

=IF($C5="Variable",[copy $B5],"")

像这样,我猜?我想最简单的方法是“有没有办法自动运行一次公式?”,这比我的旧标题“在引用单元格时拍摄数据的“快照”更好,因此它不会引用的单元格是否更改?”,所以我已经相应地更改了它。

1 个答案:

答案 0 :(得分:0)

使用 onEdit:

您可以使用 onEdit trigger,使用 Apps 脚本(点击 Tools > Script editor,复制下面的函数并保存项目)。

(为此,请创建一个新列 (G),该列将用于存储有关是否存在先前副本的信息。然后您可以将其隐藏。)

每次用户编辑电子表格时都会执行此函数,它会使用 event object 执行以下操作:

  • 检查已编辑的列是否对应于 Item,并且已编辑的列是否是您想要的工作表(您提供的电子表格中的列 C 和工作表 Recipe Cards)。
  • 如果是这样,请检查 Value 列 (D) 是否等于 Variable,列 G 是否等于某个字符串(称为 {{1} } 在下面的示例中)。
  • 如果是这种情况,请将值从 Avoid future updates 设置为 C 并将 E 写入列 Avoid future updates

代码片段:

G

参考: