这可能是一个很高级的话题。
当您按F9或重新计算工作表时,Excel首先尝试找出可能有可能更改的单元格,因此它可以跳过评估它们。该算法搜索所有祖先和祖先的祖先,以查明其中任何一个的值是否已经改变。如果是,则进行实际评估。
至少,只要路径中没有“INDIRECT()”公式,那就是这样。如果存在,则算法假定该公式的值是易变的(即它总是改变),因此评估所有后代。
还有更多不稳定的公式:RAND,AREAS,CELL,COLUMNS,INDEX,INDIRECT,NOW,OFFSET,ROWS,TODAY。其中一些显然应该是易变的(如RAND()
)。
问题:有没有办法告诉Excel,Excel处理易失性的给定单元格实际上应该保持冻结状态,除非它的祖先发生变化?
解决问题的一种方法是在VBA中编写自己的Excel易失性函数版本。假设VBA函数不是易失性的。
问题是VBA调用的成本相对较高。另一个是“重新发明轮子”的需要。我希望有一个更便宜的解决方案。
答案 0 :(得分:0)
不是你想要的答案,但...... 不要使用公式。
由于您可以在其中执行的操作的限制,用户定义的公式无法提供帮助。
推荐之前的评论建议将计算转换为类似于...的模式 1.将所有表格数据拉入2D数组 2.对数据执行X变换 3.将数据推回到等大小的纸张地址,再推送到2D数组。
答案 1 :(得分:0)
答案是否定的。但幸运的是,通常总是使用易失性函数的非易失性替代方法,包括CHOOSE,INDEX,在日期/时间函数的情况下,您可以使用易失的NOW和TODAY函数来提供下拉列表。
对于我之前撰写过很多链接的长篇文章,请参阅https://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/以及有关使用下拉菜单以避免波动的更多信息,请参阅我在http://dailydoseofexcel.com/archives/2014/02/23/data-validation-doesnt-care-about-volatility/的其他文章