【问题标题】:Does Google Sheets have "Volatile" Functions like Excel?Google 表格是否具有 Excel 等“易失性”功能?
【发布时间】:2019-12-18 22:07:18
【问题描述】:

在 Excel 中,VlookupIndirect 是臭名昭著的易失函数示例,其中每次编辑单元格时都会进行不必要的重新计算(即使它不会更改输出)。 Google 表格中是否有 volatile 函数列表,是否有任何关于其使用的文档警告,或者这不是同一类型的问题?

更新:Vlookup 在最新版本的 excel 中不是正式的 volatile,但它确实会在编辑单元格时导致(最近没有检查过)重新计算,由于优化不佳而永远不会改变输出。

【问题讨论】:

    标签: google-sheets google-sheets-formula


    【解决方案1】:

    是的,Google Sheet 确实有 volatile 函数:

    • NOW
    • TODAY
    • RAND
    • RANDBETWEEN

    唯一的问题是它们很难被冷冻

    【讨论】:

    • 这是有道理的,您可以直观地看到这一点,但在您知道并且可以看到重新计算的意义上,它们在视觉上是易变的。但是,在 excel 中,您可以拥有一个永远不会改变的 vlookup,但是如果您更改一个完全不相关的单元格,它会导致该单元格“秘密地”重复 vlookup,因此,如果您在一个完全不相关的工作表中有数千个 vlookup,它会导致巨大的性能损失。 vlookup 在 Google 表格中实际上不是易变的,因此它是对 Excel 的改进,还是存在相同的问题(如果有,则意味着存在更多易变的函数)。
    • GS 中的 vlookup 完全没有这样的问题。这些是 GS 唯一的 volatile 函数
    • today() 几乎是普通人必须注意的唯一函数,因为他们可以将其放在一个单元格中。我注意到将数组放入公式中也有点“不稳定”,因为如果您引用 10k 个单元格并且一个 get 发生更改,它会强制计算所有 10k 个,但这是一种常识,但会导致速度变慢,尤其是被 ArrayFormula 宠坏了.
    • 我正在对您的最后一条语句hard to be freezed 发表评论,通过打开循环引用,您可以使用 if 语句 if(freeze,circularreference,rand()) 轻松冻结它们
    【解决方案2】:

    这个问题的一部分询问是否有任何文档列出哪些工作表公式是易变的。我找不到任何列表来自 Google。 (有很多 3rd 方网站,例如 Ben Collins 提供了一个列表,但没有给出来源)。我能找到的唯一确认函数波动性的 Google 文档是查看 the full list of Google Sheet's formulas。不幸的是,要全面检查公式,必须单击每个公式的详细信息并检查注释:

    我交叉检查了Microsoft lists as volatile 的 Excel 公式,显示 Player() 列表是正确的(不足为奇)。有趣的是(对我来说)OffsetIndirect 在谷歌表格中没有被列为 volatile。这可以为数组函数和其他引用提供更大的灵活性。

    关于 Vlookup 的 OP 评论旁注

    OP 断言 vlookup 是一个 volatile 函数。这是不正确的,如Microsoft link 所示。与index/matchxLookup 相比,VLookup 的计算效率确实较低,但在vlookup 范围之外的单元格中的更改不会触发重新计算。

    【讨论】:

    • 尽管它不是正式的 volatile ,但在许多正常的用例情况下,更改永远不会更改输出的单元格会强制重新计算不必要的。
    • 我还记得在某处阅读过一篇文章,其中 Excel 更新并优化了 vlookup 功能,但我似乎找不到它。更新了 OP 以注意它不是易失性的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多