如何衡量Excel计算速度?

时间:2013-08-12 19:12:44

标签: performance excel

我正在开发 Excel 2010应用程序,其中包含超过60多个工作表中的复杂计算。当我更改任何单元格中的某些数据时,在后台计算中需要花费大量时间(我希望计算自动).....

  1. 有没有办法找出哪个公式花费更多时间而不是另一个?
  2. 什么是提高绩效的更好方法 - 多个简单公式与单个复杂(MULTISTEP)公式?
  3. 即。
    [STEP-1] E1 = C1 * D1
    [STEP-2] F1 = E1 / B1
    [STEP-3] G1 = F1 + B1

    [SINGLE STEP] G1 = (C1 * D1 / B1) + A1

    建议将不胜感激!
    感谢

2 个答案:

答案 0 :(得分:3)

至于第二部分,如果你使用普通的非易失性函数,那么多个简单公式可能会更好,原因有两个:

  1. 在简单重新计算(不重建依赖关系树)时,Excel将仅计算实际更改的部分,例如在单步示例中,如果A1中的值发生更改,则即使(C1 * D1 / B1)的值未更改,Excel也必须重新计算括号C1, D1, B1中的表达式。当您使用F1参考替换该部件时,如果只有A1更改其值,则不会重新计算F1的值。
  2. 如果您有多个核心,可以更好地并行计算多个简单公式。
  3. 除MSDN之外的另一个有用的链接:http://www.decisionmodels.com/calcsecretsc.htm

    在非常大的工作簿中,易失性函数是邪恶的,尤其是OFFSET和INDIRECT。每次文件中的任何更改都会重新计算它们,并且它们始终在单个线程中计算。依赖于具有易失性函数的单元的任何单元也变得易失,因为每次重新计算易失性函数时都必须重新计算所有依赖性。大文件中的病毒性波动可能严重损害性能。在这种情况下,使用许多简单公式也有帮助,因为许多依赖关系可以保持非易失性。

    从上面的链接:

      

    某些Excel功能不使用多线程计算,例如:

         

    数据表计算(但对表的结构化引用确实使用   MTC)。用户定义的函数(但XLL函数可以是   多线程启用)。 XLM功能。 INDIRECT,CELL使用的功能   格式2或地址选项。 GETPIVOTDATA等   引用数据透视表或多维数据集的函数。 Range.Calculate和   Range.CalculateRowMajorOrder。循环参考循环中的单元格。

    曾几何时,我继承了一个大文件,花了30分钟在专用的快速机器上重新计算,这是由于疯狂使用OFFSETS来访问大页面中的数据。只需将计算逻辑从Excel移动到Access并通过数据透视表导入结果,我就将总计算时间减少到几秒钟!

答案 1 :(得分:1)

这可能对您的第一个问题http://msdn.microsoft.com/en-us/library/ff700515%28v=office.14%29.aspx有所帮助,但可以看出,您的问题可能接近于偏离主题,因为需要一本书来全面回答。对于你的第二个问题,我猜“没有明显的区别”。