我有一个电子表格,其输入数量很少,可以驱动大量的中间计算,从而驱动少量依赖于许多中间值的昂贵计算。一些计算使用UDF返回单个返回值和数组,而其他计算则是单元格本身的常规公式。
我很好奇是否有一个已知模型来描述Excel中单元格的更新顺序。
例如,它可能正在改变输入A1,计算B1,B2,B3取决于,计算C1取决于B1,B2和B3 ...将C1更新三次,因为每个更新的中间值,或B1,B2和B3会先更新,而C1只更新一次吗?
答案 0 :(得分:5)
这里有关于Excel用于查找计算序列的算法的文档
http://www.decisionmodels.com/calcsecretsc.htm
http://msdn.microsoft.com/en-us/library/aa140058%28office.10%29.aspx
但最重要的是,由于计算链是动态确定的,并且从先前的计算链序列开始,因此可能会在一次情况下多次计算单元格,而不是在后续计算单元格中计算单元格。 如果您知道计算依赖关系的结构,则可以使用Range.Calculate和Sheet.calculate在一定程度上控制事物。
答案 1 :(得分:4)
Excel现在使用 Multi-Threaded Calculation ,这使得整个事情难以预测,除了依赖树中的那些定向子项。请参阅链接。
HTH!
答案 2 :(得分:1)
关于您更具体的问题“C1 = C1(B1,B2,B3)和B1 = B1(A1),B2 = B2(A1),B3 = B3(A1),计算顺序为
1)A1 2)B1,B2,B3(任意顺序) 3)C1
和C1只计算一次。
我的声明不是来自任何Excel文档,而是来自我使用Excel的经验和我在电子表格的Java对象处理程序上的工作(请参阅this paper)。根据我的观察,Excel不会对单元格中的函数进行不必要的调用。
如果工作表的依赖关系树有几个可以“点燃”计算的“叶子”,则不确定Excel的开始位置。如果打开工作表并重新计算整个工作表,则很难预测“独立”单元格的计算顺序。与工作表一起存储的值的缓存可能会对重新计算产生影响。 (我看到的是:第一个单元格excel touches是在保存工作表之前更改的最后一个单元格。)