我正在开发 Excel 2010应用程序,其中包含超过60多个工作表中的复杂计算。当我更改任何单元格中的某些数据时,在后台计算中需要花费大量时间(我希望计算自动).....
即。
[STEP-1] E1 = C1 * D1
[STEP-2] F1 = E1 / B1
[STEP-3] G1 = F1 + B1
或
[SINGLE STEP] G1 = (C1 * D1 / B1) + A1
建议将不胜感激!
感谢
答案 0 :(得分:3)
至于第二部分,如果你使用普通的非易失性函数,那么多个简单公式可能会更好,原因有两个:
A1
中的值发生更改,则即使(C1 * D1 / B1)
的值未更改,Excel也必须重新计算括号C1, D1, B1
中的表达式。当您使用F1参考替换该部件时,如果只有A1更改其值,则不会重新计算F1的值。除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有所帮助,但可以看出,您的问题可能接近于偏离主题,因为需要一本书来全面回答。对于你的第二个问题,我猜“没有明显的区别”。