为什么我的 Google 表格公式不会自动重新计算?

问题描述 投票:0回答:5

我在“摘要”工作表的单元格中有这个公式,该公式正在等待创建名称为日期的新工作表:

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

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

奇怪的是,如果我在该列的左侧添加一列,其中包含上面所示的公式,那么它会重新计算......一切都很好。另一个奇怪的事情是,如果我添加一列距离相关列足够远,那么它不会像我在相关列附近添加一列时那样重新计算(嗯......)。

这是怎么回事?我该如何解决这个问题?谷歌似乎在这个领域有一些重大错误或者其他什么......

google-sheets google-sheets-vlookup
5个回答
6
投票
  • 这是由于

    INDIRECT

  • 部分解决方法:

      =IFERROR(INDIRECT("'"&C9&"'!A1"),RAND())
    
  • 在公式中使用此选项,而不仅仅是

    INDIRECT
    。它仍然不会在打开和关闭时更新。但每当工作表中的任何位置有编辑时,它都会更新(使其成为带有
    RAND()
    的双易失性组合)。

  • 此外,尝试在电子表格设置中每 6 小时左右打开重新计算一次。

PS:由于剧烈的波动,您的电子表格可能会被烧毁🔥🔥。


1
投票

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

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

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

0
投票

基于与 TheMaster 类似的想法,我定义了一个命名范围

refresh
并在
else
公式的
IFERROR
部分引用它。 每当我创建新工作表、重命名现有工作表或需要确保更新所有
indirects
时,我只需编辑
refresh
的内容,然后将其放回空白即可。

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

0
投票

我使用了 Berteh 的想法,但发现将

refresh
范围放在
else
iferror
部分内,消除了在没有值或其他任何情况下拥有空白单元格的好处。 d 想使用
else
来。

因此,为了保持这一点,我将其放在一起,这似乎让我们受益于保留使用

iferror
的好处并强制
indirect
更新。

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

更新

refresh
范围的值将强制重新计算(我将单元格 A1 的值从 1 更改为 0,然后再更改回 1)。我已经在多个工作表的多行上实现了此功能,但没有发现这会破坏 Google 工作表。


0
投票

我找到了这篇文章,并尝试使用 RAND() 函数作为触发器来解决这个问题。我想要同样的想法:当没有匹配时结果为空白。所以,我的解决方案是用 IF(RAND()*0=0,"","") 替换 RAND() 这样,我的触发器和结果就为空白。 成功了!

© www.soinside.com 2019 - 2024. All rights reserved.