为什么我的 Google Sheets 公式没有自动重新计算?

Why does my Google Sheets formula not automatically recalculate?

我在 'Summary' sheet 的单元格中有这个公式,它正在等待创建一个新的 sheet,其名称是一个日期:

=IFERROR(VLOOKUP($A3, INDIRECT("'"&TEXT(BN,"m/d/yyyy")&"'!$E:$o0"), 11, false), "")

但是,当我添加名称匹配的新 sheet 时,它不会自动重新计算并从新 sheet 中提取值。

奇怪的是,如果我在此列的左侧添加一列,该列具有上面显示的公式,然后它会重新计算...一切正常。另一件奇怪的事情是,如果我在距离相关列足够远的地方添加一列,那么它不会像我在相关列附近添加一列时那样重新计算(hmmmm ....)。

这是怎么回事?我该如何解决?似乎 Google 在这方面有一些重大错误或其他问题...

  • 这是由于INDIRECT

  • 部分解决方法:

    =IFERROR(INDIRECT("'"&C9&"'!A1"),RAND())
    
  • 在你的公式中使用这个而不是 INDIRECT。它仍然不会在打开和关闭时更新。但它会更新,只要在 sheet 中的任何地方进行编辑(使其成为与 RAND() 的双重易失性组合)。

  • 另外,尝试在 spreadsheet 设置中每 6 小时左右打开一次重新计算。

PS:您的点差sheet 可能会因剧烈波动而销毁。

基于类似于 TheMaster 的想法,我定义了一个命名范围 refresh 并在 IFERROR 公式的 else 部分引用了它。 每当我创建一个新的 sheet、重命名一个现有的,或者觉得需要确保所有 indirects 都已更新时,我只需编辑 refresh 的内容并将其放回空白。

=arrayformula(iferror(indirect(B11&"!D42:H42");refresh))

抱歉回复晚了,但我相信我有一个效果更好的解决方案。我在涉及几乎完全相同的一组公式的公式时遇到了同样的问题。

基本上,只需添加一个检查以查看 now() 是否等于不可能的时间 (0),当它失败时(每次),让它执行不会自行更新的公式。

=IF(NOW()=0,"",
IFERROR(VLOOKUP($A3, INDIRECT("'"&TEXT(BN,"m/d/yyyy")&"'!$E:$o0"), 11, false), "")
)

我使用了 Berteh 的想法,但发现将 refresh 范围放在 iferrorelse 部分内消除了如果有空白单元格的方法的好处没有价值,或者您还想将 else 用于什么目的。

因此,为了保持这一点,我将其放在一起似乎让我们受益于保留使用 iferror 并强制 indirect 更新的好处。

=IF(refresh!$A=1,IFERROR(VLOOKUP($B68,INDIRECT(D&"A1:aa2000"),8,0),""))

更新 refresh 范围的值将强制重新计算(我将单元格 A1 的值从 1 更改为 0,然后再更改为 1)。我已经在多张纸上的多行上实现了这一点,但没有发现这会破坏 Google Sheet.