如何衡量Excel计算速度?

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

  1. 有没有什么方法可以找出哪个配方需要更多的时间呢?
  2. 什么是更好的方法来提高性能 – 多个简单公式与单一复杂(MULTISTEP)公式?


[STEP-1] E1 = C1 * D1
[STEP-2] F1 = E1 / B1
[STEP-3] G1 = F1 + B1

要么

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

build议将不胜感激!
谢谢

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

  1. 对于简单的重新计算(无需重build依赖关系树),Excel将只计算实际更改的部分,例如,在单步示例中,如果A1值发生更改,则Excel将不得不重新计算括号(C1 * D1 / B1)的expression式C1, D1, B1的值不变。 当您用F1的引用replace该零件时,如果只有A1改变其值,F1的值将不会被重新计算。
  2. 如果您有多个核心,则可以更好地计算多个简单公式。

另一个有用的链接除了MSDN: http : //www.decisionmodels.com/calcsecretsc.htm

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

从上面的链接:

某些Excelfunction不使用multithreading计算,例如:

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

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