是否有办法在匹配某个条件后停止更新公式?
例如:
A1 = 1
B1 = '=A1*2'
让我们说这是现在的。明天数据将会改变
A1 = 2
B1 = '=A1*2'
我需要能够将单元格B1的值固定为2(1 * 2),而不是将其更新为4(2 * 2)。触发器应该是日期。
A1中的值将动态切换;我无法阻止,我只需要能够在匹配日期后阻止其他单元格更新。
答案 0 :(得分:2)
您可以使用循环引用。例如,在A2中我输入了
=IF(NOW() < C1,2*A1,A2)
C1的值为6/24/2015 14:39
我在文件&gt;下启用循环引用选项&gt;公式。在2:39之前我的时间我能够改变A1的值并看到A2的变化。那是2分钟前(在我的时区)。现在当我改变A1时,A2的值保持不变。
答案 1 :(得分:2)
VBA答案。这个甚至可以在禁用循环引用的情况下工作(尽管它不太灵活)。它定义了两个工作表函数,可以选择性地评估单元格中的公式或冻结它们,具体取决于条件:
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中你输入= EvaluateIf(“2 * A1”,C1)那么当C1包含= True()时B1用A1更新但如果C1有= False()则B1保持冻结状态。对于第二个函数,如果在B2中输入= FreezeAfter(“A1 * 2”,C2),如果在C2中你有类似6/25/2015 1:00:00 PM的东西那么B2中的公式将用A1更新到下午1点,但之后会一直冻结。
在这两种方法中(圆形与VBA)我怀疑非VBA可能更有效并且可能更可靠(我没有用各种各样的函数测试VBA方法)。另一方面 - 启用循环引用可能会导致问题(默认情况下不会无故关闭)。
答案 2 :(得分:0)
没有简单的方法可以做到这一点。 我只是简单地添加了两个包含@NOW()函数的时间戳单元格,它们的格式设置为显示时间。另一个包含@Today以显示日期。然后,我将特殊粘贴复制到正确的单元格,并保留值和源格式。