我在“摘要”表单的单元格中有这个公式,它正在等待创建一个新表格,其名称是日期:
=IFERROR(VLOOKUP($A3, INDIRECT("'"&TEXT(BN$2,"m/d/yyyy")&"'!$E$6:$o$100"), 11, false), "")
但是,当我添加具有匹配名称的新工作表时,它不会自动重新计算并从新工作表中提取值。
奇怪的是,如果我在此列的左侧添加一个具有上面显示的公式的列,那么它会重新计算......一切都很好。另一个奇怪的事情是,如果我添加一个远离相关列的列,那么它不会像我在相关列附近添加列时那样重新计算(hmmmm ....)。
这里发生了什么?我该如何解决它?似乎谷歌在这个领域存在一些重大缺陷或者什么......
答案 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
范围放在 else
的 iferror
部分内消除了在没有值,或者您想将 else
用于其他用途。
因此,为了保持这一点,我将其放在一起,这似乎使我们受益于保留使用 iferror
并强制更新 indirect
的好处。
=IF(refresh!$A$1=1,IFERROR(VLOOKUP($B68,INDIRECT(D$66&"A1:aa2000"),8,0),""))
更新 refresh
范围的值将强制重新计算(我将单元格 A1 的值从 1 更改为 0,然后再更改回 1)。我已经在多张工作表的多行上实现了这一点,但没有发现这会炸毁 Google 表格。