这可能是一个有点高级的话题。
当您按 F9 或重新计算工作表时,Excel 会首先尝试找出可能会更改的单元格,因此它可以完全跳过评估它们。该算法搜索所有祖先和祖先的祖先以找出其中任何一个的值是否已更改。如果是,则进行实际评估。
至少,只要路径中没有“INDIRECT()”公式,那将是这样。如果有,算法假定这个公式的值是易变的(即它总是变化的),因此计算所有的后代。
还有更多易变的公式:RAND、AREAS、CELL、COLUMNS、INDEX、INDIRECT、NOW、OFFSET、ROWS、TODAY。其中一些显然应该是易变的(比如RAND()
)。
问题:有没有办法告诉 Excel,被 Excel 处理为 volatile 的给定单元格实际上应该保持冻结状态,除非它的祖先发生变化?
解决问题的一种方法是在 VBA 中编写我自己版本的 Excel volatile 函数。假定 VBA 函数不是易失的。
问题是 VBA 调用的成本相对较高。另一个是“重新发明轮子”的需要。我希望有一个更便宜的解决方案。