2

这可能是一个有点高级的话题。

当您按 F9 或重新计算工作表时,Excel 会首先尝试找出可能会更改的单元格,因此它可以完全跳过评估它们。该算法搜索所有祖先和祖先的祖先以找出其中任何一个的值是否已更改。如果是,则进行实际评估。

至少,只要路径中没有“INDIRECT()”公式,那将是这样。如果有,算法假定这个公式的值是易变的(即它总是变化的),因此计算所有的后代。

还有更多易变的公式:RAND、AREAS、CELL、COLUMNS、INDEX、INDIRECT、NOW、OFFSET、ROWS、TODAY。其中一些显然应该是易变的(比如RAND())。

问题:有没有办法告诉 Excel,被 Excel 处理为 volatile 的给定单元格实际上应该保持冻结状态,除非它的祖先发生变化?


解决问题的一种方法是在 VBA 中编写我自己版本的 Excel volatile 函数。假定 VBA 函数不是易失的。

问题是 VBA 调用的成本相对较高。另一个是“重新发明轮子”的需要。我希望有一个更便宜的解决方案。

4

1 回答 1

0

不是你想要的答案,但是......不要使用公式。

由于您可以在其中执行的操作的限制,用户定义的公式也无济于事。

推荐为先前的评论建议将计算移动到类似于...的模式中...
1.将所有工作表数据拉入二维数组。
2.对数据进行X变换。
3. 将数据推回相同大小的工作表地址,到二维数组。

于 2014-09-30T01:03:33.697 回答