是否可能防止Excel工作表中的单个单元格发生计算?假设我有1001个计算非常快的单元格,但是一个单元格减慢了工作表,是否可以只对该一个单元格禁用计算?
我不想做的是:
发布于 2014-08-22 16:12:34
使用Excel的=IF()函数。它被设置为“短路”--它只在第一个参数为真时计算第二个参数,而对于第三个参数则相反。
所以,如果单元格是C1,并且单元格的公式是当前
=LOOKUP(2,1/(A1:A100000=666),B1:B100000)并且您希望只在D1为真时才计算它,请使用
=IF(D1,LOOKUP(2,1/(A1:A100000=666),B1:B100000),C1)注意,这是一个循环引用--当D1为false时,它是如何保持相同值的。如果您想要删除警告消息,请打开迭代。
另一种方法是使用第三方外接程序之一,它允许您在表外存储全局变量,然后检索它,这将使用如下语法:
=IF(D1,SetGlobal("C1StoredCalculation",LOOKUP(2,1/(A1:A100000=666),B1:B100000)),GetGlobal("C1StoredCalculation"))SetGlobal()和GetGlobal()也可以用VBA编写,尽管它们比XLL慢一点点,如果您重置VBA项目,它们将失去这个值。
发布于 2014-08-22 13:54:14
Excel没有禁用单个单元格计算的方法。您可以将慢速公式移动到单独的工作表,并使用worksheet.enablecalculation禁用该工作表的计算。
或者,您可以将公式作为文本存储在某个位置,将结果作为值存储在单元格中,然后在要计算公式时恢复公式。
发布于 2014-08-22 14:13:54
您可以使用替代的UDF,并利用缺乏波动性的优势。
假设我们有这样的公式:
=LOOKUP(2,1/(A1:A100000=666),B1:B100000)如果cols A或B中的任何单元格发生变化,Excel将重新计算此值,但UDF将重新计算。
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中的细胞进行任何更改,在更改Z100之前,myudf将保持未重新计算的状态。
您可以使用同样的小技巧来制作=今天()或=NOW() for =RAND()的“准易失性”版本。
https://stackoverflow.com/questions/25447993
复制相似问题