我有一个谷歌表格,旨在为我计算一些东西并使用复杂的公式。在多种情况下,当我单击单元格并选择全部时,它会显示预期值。然而,该单元格在视觉上仍然是空白的,当我运行 =(LEN(B4) 来测试它时,它说长度为零。
我有以下公式:
=IF(ISERROR(INDIRECT(("'"&$A4&" "&B$1&"'!"&(INDIRECT("'"&$A4&" "&B$1&"'!"&"$B$2"))))),"",INDIRECT(("'"&$A4&" "&B$1&"'!"&(INDIRECT("'"&$A4&" "&B$1&"'!"&"$B$2")))))
如果我选择整个公式,它会显示为 66。我尝试复制并粘贴公式,唯一有效的方法是再次从另一个单元格拖动公式。这种情况发生在使用该公式的所有位置,但是一旦我将公式拖过,它就会显示正确的值。格式像平常一样是白底黑字,所以我并不是不让它可见。如果我更改它引用的任何单元格的值,该单元格将再次变为“空白”,我必须重新拖动它才能使其工作。
indirect()
公式通常会导致性能问题,尤其是在复制多个单元格时。通常有更好的方法来查找数据,包括 filter()、query() 和 vlookup() 与 match() 等函数。使用数组公式,这些函数也可以轻松地一次性应用于一系列单元格。
该公式使用
indirect()
的四个实例:
=IF( ISERROR(INDIRECT(("'"&$A4&" "&B$1&"'!"&(INDIRECT("'"&$A4&" "&B$1&"'!"&"$B$2"))))), "", INDIRECT(("'"&$A4&" "&B$1&"'!"&(INDIRECT("'"&$A4&" "&B$1&"'!"&"$B$2")))) )
您可以通过将公式简化为两个
indirect()
实例来提高性能,如下所示:
=iferror(indirect($A4 & " " & B$1 & "!" & indirect($A4 & " " & B$1 & "!" & "B2")))
...然后进一步应用DRY,如下所示:
=let(
sheetRef, $A4 & " " & B$1 & "!",
cellRef, indirect(sheetRef & "B2"),
iferror(indirect(sheetRef & cellRef))
)
要进一步提高电子表格性能,请参阅我的优化技巧。