在标准匹配后,从更新公式中停止Excel

有一种方法可以在匹配某个标准后停止更新公式吗?

例如:

A1 = 1 B1 = '=A1*2' 

可以说这是目前的一个。 明天的数据将会改变

 A1 = 2 B1 = '=A1*2' 

我需要能够将单元格B1的值固定为2(1 * 2),而不是将其更新为4(2 * 2)。 触发应该是date。

A1中的值将dynamic切换; 我不能阻止,我只需要能够阻止其他细胞更新date匹配后。

一个VBA的答案。 即使循环引用被禁用(尽pipe它不太灵活),这个工作。 它定义了两个工作表函数,可以根据条件有select地评估单元格中的公式或冻结它们:

 Function EvaluateIf(expression As String, condition As Boolean) As Variant Application.Volatile Dim myText As String Dim myVal As Variant If condition Then myVal = Application.Evaluate(expression) Else myText = Application.Caller.Text If IsNumeric(myText) Then myVal = Val(myText) Else myVal = myText End If End If EvaluateIf = myVal End Function Function FreezeAfter(expression As String, deadline As Date) As Variant Application.Volatile Dim myText As String Dim myVal As Variant If Now > deadline Then myText = Application.Caller.Text If IsNumeric(myText) Then myVal = Val(myText) Else myVal = myText End If Else myVal = Application.Evaluate(expression) End If FreezeAfter = myVal End Function 

说明他们的用法。 如果在B1中input= EvaluateIf(“2 * A1”,C1),那么当C1包含= True()B1更新为A1,但如果C1具有= False(),则B1保持冻结状态。 对于第二个函数,如果在B2中input= FreezeAfter(“A1 * 2”,C2),并且如果在C2中有类似于6/25/2015 1:00:00 PM那么B2中的公式将更新为A1到下午1:00,但之后将保持冻结。

在这两种方法中(循环与VBA),我怀疑非VBA可能更有效率,可能更可靠(我还没有testingVBA方法的各种function)。 另一方面 – 启用循环引用可能会导致问题(默认情况下不会因为无缘由而closures)。

您可以使用循环引用。 例如,在A2我input

 =IF(NOW() < C1,2*A1,A2) 

C1的价值6/24/2015 14:39

我在文件>选项>公式下启用循环引用。 在2:39之前,我可以改变A1的值,看看A2的变化。 那是2分钟前(在我的时区)。 现在当我改变A1时,A2的值保持不变。