为什么我的 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
范围放在 iferror
的 else
部分内消除了如果有空白单元格的方法的好处没有价值,或者您还想将 else
用于什么目的。
因此,为了保持这一点,我将其放在一起似乎让我们受益于保留使用 iferror
并强制 indirect
更新的好处。
=IF(refresh!$A=1,IFERROR(VLOOKUP($B68,INDIRECT(D&"A1:aa2000"),8,0),""))
更新 refresh
范围的值将强制重新计算(我将单元格 A1 的值从 1 更改为 0,然后再更改为 1)。我已经在多张纸上的多行上实现了这一点,但没有发现这会破坏 Google Sheet.
我在 '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
范围放在 iferror
的 else
部分内消除了如果有空白单元格的方法的好处没有价值,或者您还想将 else
用于什么目的。
因此,为了保持这一点,我将其放在一起似乎让我们受益于保留使用 iferror
并强制 indirect
更新的好处。
=IF(refresh!$A=1,IFERROR(VLOOKUP($B68,INDIRECT(D&"A1:aa2000"),8,0),""))
更新 refresh
范围的值将强制重新计算(我将单元格 A1 的值从 1 更改为 0,然后再更改为 1)。我已经在多张纸上的多行上实现了这一点,但没有发现这会破坏 Google Sheet.