是否可以防止在Excel工作表中发生单个单元格的计算?让我们说我有1001个单元计算速度非常快,但是1个单元格减慢了单页,是否可以仅禁用该单元格的计算?
我不想做的事情:
答案 0 :(得分:4)
使用Excel的=IF()
功能。它设置为“短路” - 它仅在第一个参数为真时评估第二个参数,对第三个参数则相反。
因此,如果单元格是C1,则单元格的公式当前是
=LOOKUP(2,1/(A1:A100000=666),B1:B100000)
并且您希望仅在D1为真时计算它,使用
=IF(D1,LOOKUP(2,1/(A1:A100000=666),B1:B100000),C1)
注意它是一个循环引用 - 当D1为假时,它是如何保持值相同的。如果要删除警告消息,请启用迭代。
另一种方法是使用其中一个第三方加载项,允许您在表外存储全局变量然后检索它,这将使用如下语法:
=IF(D1,SetGlobal("C1StoredCalculation",LOOKUP(2,1/(A1:A100000=666),B1:B100000)),GetGlobal("C1StoredCalculation"))
SetGlobal()
和GetGlobal()
也可以用VBA编写,虽然它们比XLL慢一点,如果重置VBA项目,它们将失去价值。
答案 1 :(得分:2)
Excel没有禁用单个单元格计算的方法。 您可以将慢速公式移动到单独的工作表中,并使用worksheet.enablecalculation禁用该工作表的计算。
或者您可以将公式存储在文本中,将结果存储为单元格中的值,然后在计算时恢复公式。
答案 2 :(得分:2)
您可以使用替换 UDF 并利用缺乏波动性。
假设我们有一个类似的公式:
=LOOKUP(2,1/(A1:A100000=666),B1:B100000)
如果cols A 或 B 中的任何单元格发生变化,但 UDF
,Excel将重新计算此值Public Function myudf(r As Range) As Variant
myudf = Evaluate("LOOKUP(2,1/(A1:A100000=666),B1:B100000)")
End Function
只会在其参数更改时重新计算。所以选择一个单元格并输入:
=myudf(Z100)
对cols中的单元格进行任何更改 A 或 B 和 myudf 将保持不重新计算,直到您更改 Z100 强>
您可以使用相同的小技巧来制作"准易失性"版本 = TODAY()或 = NOW() = RAND()
答案 3 :(得分:0)
我不认为这可以做到。您可以关闭整个工作簿中的自动计算(如您所述),但我认为没有办法在单个单元格上执行此操作。