4

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

  1. 有没有办法找出哪个公式比另一个公式花费更多时间?
  2. 什么是提高性能的更好方法 - 多个简单公式与单个复杂(MULTISTEP)公式?

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

或者

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

建议将不胜感激!
谢谢

4

2 回答 2

3

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

  1. 在简单的重新计算(不重建依赖树)中,Excel 将仅计算实际更改的部分,例如,在您的单步示例中,如果值发生更改,那么即使的值未A1更改,Excel 也必须重新计算括号中的表达式。当您将该部分替换为对 F1 的引用时,如果仅 A1 更改其值,则不会重新计算 F1 的值。(C1 * D1 / B1)C1, D1, B1
  2. 如果您有多个内核,则可以更好地并行计算多个简单的公式。

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

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

从上面的链接:

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

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

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

于 2013-08-12T19:45:37.007 回答
1

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

于 2013-08-12T19:25:39.707 回答