防止细胞被计算

是否有可能防止计算发生在Excel工作表中的单个单元格? 假设我有1001个计算速度非常快的单元格,但是1个单元格减慢了单元格,是否可以仅禁用该单元格的计算?

我不想做的事情:

  1. 以编程方式禁用所有单元格计算
  2. 全局计算设置为手动时,按程序计算特定单元格

使用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) 

如果列AB中的任何单元格发生更改,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) 

对列AB中的单元格进行任何更改,并且在更改Z100之前, myudf将保持不重新计算

您可以使用相同的小技巧来为= RAND()创build = TODAY()= NOW()的 “准易失性”版本。

我不认为这可以做到。 您可以closures整个工作簿中的自动计算(正如您所提到的),但我不认为有一种方法可以在单个单元格上执行此操作。