Excel-我需要使公式的输出值永久不变,即使输入被删除
我想在计算器上创建类似M+按钮的东西 我希望在更改或删除输入值时,公式的输出值不会被覆盖,而是与新的输入一起在公式中再次使用。希望这是有道理的Excel-我需要使公式的输出值永久不变,即使输入被删除,excel,vba,Excel,Vba,我想在计算器上创建类似M+按钮的东西 我希望在更改或删除输入值时,公式的输出值不会被覆盖,而是与新的输入一起在公式中再次使用。希望这是有道理的 另一方面,我希望输出值与同一公式中的新输入值一起使用(这是一个简单的加法公式)。也许你可以用VBA做类似的事情,尽管我认为没有VBA是不行的(至少不用循环引用,循环引用也有自己的问题)。关键是使用一个静态字典,它保留包含公式的每个单元格状态的内存。比如: Function PlusM(x As Double) As Double Static s
另一方面,我希望输出值与同一公式中的新输入值一起使用(这是一个简单的加法公式)。也许你可以用VBA做类似的事情,尽管我认为没有VBA是不行的(至少不用循环引用,循环引用也有自己的问题)。关键是使用一个静态字典,它保留包含公式的每个单元格状态的内存。比如:
Function PlusM(x As Double) As Double
Static states As Object, state As Double, key As String
If states Is Nothing Then
Set states = CreateObject("Scripting.Dictionary")
End If
key = Application.Caller.Address
If states.Exists(key) Then
state = states(key)
Else
state = 0
states.Add key, state
End If
state = state + x
states(key) = state
PlusM = state
End Function
当A1最初为空时,如果我将=PlusM(A1)
放入A2中,则A2将显示0。如果我在A1中输入任何值,那么A2现在将显示该值。如果我随后删除A1中的值,A2将保留其值。如果我在A1中放入一个新值,A2将显示其旧值+A1中的新值。字典的使用允许不同的单元格具有=PlusM()
的实例,而不会使一个单元格的状态泄漏到另一个单元格的状态
这并不是最可靠的解决方案——状态丢失是一个问题。如果项目被重置(包括关闭然后重新打开工作簿),它将不会保留其状态。我尝试过用
state=Application.Caller.Value
替换行state=0
,结果不一。如果这是一个问题,毫无疑问,可以通过工作簿\u Open()
来恢复状态。也许你可以用VBA做类似的事情,尽管我认为没有VBA你做不到(至少不用循环引用,循环引用也有自己的问题)。关键是使用一个静态字典,它保留包含公式的每个单元格状态的内存。比如:
Function PlusM(x As Double) As Double
Static states As Object, state As Double, key As String
If states Is Nothing Then
Set states = CreateObject("Scripting.Dictionary")
End If
key = Application.Caller.Address
If states.Exists(key) Then
state = states(key)
Else
state = 0
states.Add key, state
End If
state = state + x
states(key) = state
PlusM = state
End Function
当A1最初为空时,如果我将=PlusM(A1)
放入A2中,则A2将显示0。如果我在A1中输入任何值,那么A2现在将显示该值。如果我随后删除A1中的值,A2将保留其值。如果我在A1中放入一个新值,A2将显示其旧值+A1中的新值。字典的使用允许不同的单元格具有=PlusM()
的实例,而不会使一个单元格的状态泄漏到另一个单元格的状态
这并不是最可靠的解决方案——状态丢失是一个问题。如果项目被重置(包括关闭然后重新打开工作簿),它将不会保留其状态。我尝试过用
state=Application.Caller.Value
替换行state=0
,结果不一。如果这是一个问题,毫无疑问,可以通过WorkBook\u Open()
来恢复状态。无论出于何种目的,这都与时间戳工作表的更改问题无异。无论出于何种目的,这都与时间戳工作表的更改问题无异。