我有这个细胞公式...
=IF( (VLOOKUP(E2,$L$1:$M$12,2,0)+D2)<>"", (VLOOKUP(E2,$L$1:$M$12,2,0)+D2),"")
这似乎是一个主要情况,有人会编写类似的代码
=IF( (VLOOKUP(E2,$L$1:$M$12,2,0)+D2)<>"",cond,"")
其中 cond 是对先前测试标准的评估。 有这样的事吗?
因为 Excel 是一个专有软件,所以我们在很大程度上只能推测和实验来识别其内部逻辑的行为 - 然而,我强烈怀疑中间结果是由 Excel 内部使用的任何解释器/编译器缓存和重新组织的,因此具有相同参数的相同函数在单个单元格内以及在同一工作表中的所有单元格内重新请求并没有多大意义
中间结果的缓存称为 memoizing (https://en.wikipedia.org/wiki/Memoization),这是一种常见做法,通过在结果非常复杂时创建函数和参数的哈希图来定义。计算成本昂贵或可能被多次请求
通常,这种缓存有额外的计算,因此缓存不会无限期增长
Python 文档有一个很好的例子https://docs.python.org/3/library/functools.html#functools.cache
虽然解释器/编译器本身可以在其单元计算的表示中发现并简化中间结果请求,有时称为提升(https://en.wikipedia.org/wiki/Loop-invariant_code_motion)