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

时间:2017-10-05 15:02:48

标签: google-sheets

我在“摘要”表单的单元格中有这个公式,它正在等待创建一个新表格,其名称是日期:

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

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

奇怪的是,如果我在此列的左侧添加一个具有上面显示的公式的列,那么它会重新计算......一切都很好。另一个奇怪的事情是,如果我添加一个远离相关列的列,那么它不会像我在相关列附近添加列时那样重新计算(hmmmm ....)。

这里发生了什么?我该如何解决它?似乎谷歌在这个领域存在一些重大缺陷或者什么......

4 个答案:

答案 0 :(得分:4)

  • 这是由于INDIRECT

  • 部分解决方法:

    =IFERROR(INDIRECT("'"&C9&"'!A1"),RAND())
    
  • 在公式中使用此代替INDIRECT而非RAND()。它仍然不会在开幕和结束时更新。但它会更新,只要在工作表中的任何位置进行编辑(使其成为<div class="parent-container"> <div *ngIf="template1"> <template1 [myData]="myData"></template1> </div> <div *ngIf="template2"> <template2 [myData]="myData"></template2> </div> etc... </div> 的双重易变性组合。

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

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

答案 1 :(得分:0)

基于类似于TheMaster的想法,我定义了一个命名范围refresh,并在else公式的IFERROR部分中对其进行了引用。 每当我创建新工作表,重命名现有工作表或需要确保更新所有indirects时,我只需编辑refresh的内容,然后将其放回空白。

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

答案 2 :(得分:0)

很抱歉收到您的回复,但我相信我有一个更好的解决方案。我在使用几乎完全相同的一组公式的公式时遇到了同样的问题。

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

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

答案 3 :(得分:0)

我使用了 Berteh 的想法,但发现将 refresh 范围放在 elseiferror 部分内消除了在没有值,或者您想将 else 用于其他用途。

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

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

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