至于第二部分,如果您使用普通的非易失性函数,那么多个简单的公式可能会更好,原因有两个:
- 在简单的重新计算(不重建依赖树)中,Excel 将仅计算实际更改的部分,例如,在您的单步示例中,如果值发生更改,那么即使的值未
A1
更改,Excel 也必须重新计算括号中的表达式。当您将该部分替换为对 F1 的引用时,如果仅 A1 更改其值,则不会重新计算 F1 的值。(C1 * D1 / B1)
C1, D1, B1
- 如果您有多个内核,则可以更好地并行计算多个简单的公式。
除了 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 并通过数据透视表导入结果,我就可以将总计算时间缩短到几秒钟!