早于 Microsoft Excel 2002 的 Excel 版本
在早于 Excel 2002 的版本的 Excel,公式计算基于工作表的工作表,从 Excel 工作簿的 Sheet1 开始执行。在工作表 Sheet1 上完成计算后,Excel 会计算 Sheet2 上的公式直到计算工作簿的所有工作表上所有公式。
此进程工作正常,只要引用单元格和从属单元格处于同一工作表。如果引用单元格和从属单元格不同的工作表上,但跨工作表引用,这可能会导致一些问题。
例如,如果工作表 Sheet1 中的公式!A1 是= Sheet3!A4 + 1,这两个工作表 Sheet1!A1 和 Sheet3!A4 必须计算。工作表 Sheet1 的开头。当您尝试计算 A1 时,您可能会发现您不能因为 Sheet3!A4 不具有尚未计算。尝试计算工作表 Sheet1 上您可以继续进行。当您用完工作表 Sheet1、 计算 Sheet2。然后计算 Sheet3,最后更新 Sheet3!A4。
此时,您点击了所有的工作表。但是,工作表 Sheet1!A1 仍尚未计算,因此请返回并开始重新计算工作表 Sheet1。最后,工作表 Sheet1!可以计算 A1。将循环尝试计算任意数量的时间,具体取决于有多少跨工作表依赖项的所有工作表和它们的布局方式。
已确定此过程效率低下的方法用于计算工作簿中的公式。
Excel 2002 和 Microsoft Office Excel 2003
在 Excel 2002 和 Excel 2003 中,将保留计算公式引用的单元格的一个庞大的列表。也就是说,包含工作簿中的所有公式被都放入内存作为一个连续的列表中的公式。当您输入一个新的公式并计算出它完全在第一次时,将它置于计算链中其正确的位置。
Excel 启动计算的公式从列表顶部的任务。如果尚未计算引用的公式,Excel 公式的列表中向下跳转,并计算从属公式。然后 Excel 返回的引用的公式,并完成计算。
完成列表中的公式后,Excel 将移动到下一个公式,并将继续直到计算列表中的所有公式计算公式。
与此新过程中的计算公式,Excel 将只能进行一次工作簿中计算公式时。
一些其他计算更改要注意如下所示:
·现在不允许可重入的计算。您无法进行调用range.calculate方法中 Microsoft Visual Basic for Applications (VBA) 如果您已经在计算中。单元格 A1 中包含用户定义函数时,可以在用户定义的函数range.calculate。您会收到运行时错误。
·不能在用户定义函数中执行Name.Add方法或Name.Delete方法。
·如果您正在使用SUMIF()函数或countif ()函数其中任一条件都超过 255 个字符,将引发
#VALUE
立即错误消息。
·如果您要复制整张工作表中的单元格包含超过 255 个字符,请立即脏计算的整个表。
·当您有多个选中的工作表时,您无法执行range.calculate 。这也将引发运行时错误。
·在某些情况下,Excel 可能会非常缓慢比较到 Excel 2000 及更早版本的尤其是通过使用Ctrl + Alt + F9或执行完全重新计算时第一次从早期版本的 Excel 在 Excel 2002 中或在 Excel 2003 中打开文件时,将执行完全重新计算时计算。
Microsoft Office Excel 2007 和 Excel 2010
Excel 2007 中的一组函数以执行公式计算。若要优化性能,函数集聚集到尽可能少的查询尽可能。其他 Excel 功能均处于空闲状态时,通常是在后台执行这些聚合的查询。
在聚合查询中,将保留计算公式引用的单元格的一个庞大的列表。作为一个连续的列表中的函数包含工作簿中的所有函数都放在内存中。
当您在工作簿中输入一个新的公式时,然后第一次计算新的公式。当第一次计算新的公式时,Excel 2007 将生成一组属于新公式中,函数和集中函数的每个函数会计算链中所在的正确位置。
根据处理计算链时,计算每个单元格。如果在另一个函数没有依赖项的单元格,该单元格立即接收其值。如果单元格在另一个函数上有依赖项,单元格收到的#GETTING_DATA...,占位符错误值,然后计算传递到链中的下一个单元格。
有一次计算的所有单元格之后,Excel 2007 会触发聚合的查询或查询中检索数据所需的。正在等待数据的单元格时处理的聚合的查询后,继续显示占位符错误值#GETTING_DATA....
聚合的查询或查询的处理完成后,重新计算包含占位符的#GETTING_DATA...错误值的单元格,并且单元格收到的值。