防止细胞被计算
是否有可能防止计算发生在Excel工作表中的单个单元格? 假设我有1001个计算速度非常快的单元格,但是1个单元格减慢了单元格,是否可以仅禁用该单元格的计算?
我不想做的事情:
- 以编程方式禁用所有单元格计算
- 全局计算设置为手动时,按程序计算特定单元格
使用Excel的=IF()
函数。 它被设置为“短路” – 它只评估第二个参数,如果第一个参数是真的,反向的第三个参数。
所以,如果单元格是C1,并且单元格的公式是当前的
=LOOKUP(2,1/(A1:A100000=666),B1:B100000)
而你只想在D1为真时使用它
=IF(D1,LOOKUP(2,1/(A1:A100000=666),B1:B100000),C1)
注意这是一个循环引用 – 当D1为假时,这是如何保持相同的值。 打开迭代,如果你想摆脱警告信息。
另一种方法是使用第三方加载项之一,它可以让你存储一个全局variables的外表,然后检索它,这将使用像这样的语法:
=IF(D1,SetGlobal("C1StoredCalculation",LOOKUP(2,1/(A1:A100000=666),B1:B100000)),GetGlobal("C1StoredCalculation"))
SetGlobal()
和GetGlobal()
也可以在VBA中编写,虽然它们会比XLL慢一点,如果你重置VBA项目,它们将失去价值。
Excel没有禁用单个单元格计算的方法。 您可以将缓慢的公式移动到单独的工作表并使用worksheet.enablecalculation来禁用该工作表的计算。
或者,您可以将公式存储在文本中,将结果存储为单元格中的值,然后在计算公式时恢复公式。
您可以使用replace的UDF并利用缺乏波动性。
假设我们有一个公式:
=LOOKUP(2,1/(A1:A100000=666),B1:B100000)
如果列A或B中的任何单元格发生更改,Excel将重新计算此值,但UDF
Public Function myudf(r As Range) As Variant myudf = Evaluate("LOOKUP(2,1/(A1:A100000=666),B1:B100000)") End Function
只有在论证发生变化时才会重新计算。 所以选一个单元格并input:
=myudf(Z100)
对列A或B中的单元格进行任何更改,并且在更改Z100之前, myudf将保持不重新计算
您可以使用相同的小技巧来为= RAND()创build = TODAY()或= NOW()的 “准易失性”版本。
我不认为这可以做到。 您可以closures整个工作簿中的自动计算(正如您所提到的),但我不认为有一种方法可以在单个单元格上执行此操作。