【问题标题】:More Efficient Way to Avoid Multiple Calculations #2?避免多重计算的更有效方法#2?
【发布时间】:2019-09-17 21:46:27
【问题描述】:

这是我今天早些时候发布的另一篇文章的更难版本。 More Efficient Way to Avoid Multiple Calculations? 我的床单上有很多这样的链条。有没有比我现在做的更有效的方法?

这是需要更难的公式的示例帖子。 https://docs.google.com/spreadsheets/d/1qejqo0WzMYa5K7YCnovW-7ki97DCX2h6gGA7LE7Eeh8/edit?usp=sharing

=INDIRECT("Data!E"&(K8-1))
=INDIRECT("Data!E"&(K9-1))
=INDIRECT("Data!E"&(K10-1))

等等

我可以修改它来工作吗?

=ARRAYFORMULA(ROW(A1:A20)*????)

是否有一个公式或更有效的公式可以减少计算时间?

【问题讨论】:

    标签: arrays google-sheets google-sheets-formula array-formulas gs-vlookup


    【解决方案1】:

    你可以这样做:

    =ARRAYFORMULA(IFERROR(VLOOKUP(K8:K-1, {ROW(A:A), Data!E:E}, 2, 0)))
    

    【讨论】:

    • 我一直在使用这些数组公式时遇到问题,有时会因为缺少更好的术语而犹豫不决。我的实时项目的工作表数据中的数据每分钟导入一个新行并复制下来。当触发器每分钟运行一次时,处理时间平均只有 7 秒来计算所有内容,但有时就像今天它每分钟运行超过 30 秒,我很快就会收到来自 Google 的警告,说我正在使用许多资源。我看到虽然它落后了,但这与其他数组公式一起需要很长时间。请问有什么建议吗?
    • 在将这些更改为数组公式之前,平均每分钟处理时间约为 9 或 10 秒,但我从未有过运行 30 - 40 秒的时间段。您听说过这种情况吗?
    • 好吧,arrayformulas 也计算空行,除非你指定它们不应该。例如,上面的公式可以以超快模式编写,例如:=ARRAYFORMULA(IFERROR(VLOOKUP(INDIRECT("K8:K"&COUNTA(K8:K)+7)-1, {ROW(INDIRECT("A1:A"&COUNTA(Data!E1:E))), INDIRECT("Data!E1:E"&COUNTA(Data!E1:E))}, 2, 0))) - 这将不计算空行。但ofc“超快”执行取决于实际输入长度。规则是:计算的行数越少 = 执行速度越快
    • 谢谢!根据您使用 INDIRECT() 的想法,F7 更改是更改 K 列的原因,并且大多数情况下为零,因此我将只使用 IF true 然后使用不会更改的 INDIRECT。 =IF(F7=0,ARRAYFORMULA(VLOOKUP(AQ43:AQ79-1, {ROW(INDIRECT("Data!A13:A600")), INDIRECT("Data!E13:E600")}, 2, 0)), ARRAYFORMULA(VLOOKUP(AQ43:AQ79-1, {ROW(Data!A:A), Data!E:E}, 2, 0)))
    • 你会知道它是否“(Data!A:A)”从上到下搜索?如果是这样,查找字段从上到下开始到一个特定的数字,所以如果我在想它可能很重要?另外,我没有空行。感谢您提出我的问题。
    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2014-05-07
    相关资源
    最近更新 更多