電卓にM +ボタンを作成したいと思います。Excel - 入力が削除されても式の出力値を永久にする必要があります
入力値を変更または削除する代わりに、新しい入力とともに式で再び使用される場合、式の出力値を上書きしないようにします。うまくいけば、これは理にかなっている。
他の方法では、同じ式(これは簡単な加算式)の新しい入力値で出力値を使用します。
電卓にM +ボタンを作成したいと思います。Excel - 入力が削除されても式の出力値を永久にする必要があります
入力値を変更または削除する代わりに、新しい入力とともに式で再び使用される場合、式の出力値を上書きしないようにします。うまくいけば、これは理にかなっている。
他の方法では、同じ式(これは簡単な加算式)の新しい入力値で出力値を使用します。
おそらく、あなたはVBAなしで(少なくとも独自の問題を抱えている循環参照を使わずに)できるとは思えませんが、VBAでこのようなことをすることができます。キーは、数式を含む各セルの状態のメモリを保持する静的辞書を使用することです。ような何か:A1は、最初は空白の場合、私はA2で=PlusM(A1)
を置く場合
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
は、A2は、私はA1の任意の値を入力した場合、A2は今、その値を表示します0が表示されます。 A1の値を削除すると、A2はその値を保持します。私がA1に新しい値を入れると、A2は古い値+ A1の新しい値を表示します。辞書を使用することにより、異なるセルが=PlusM()
のインスタンスを持ち、あるセルの状態が別のセルの状態に漏れることはありません。
これは最も堅牢な解決策ではありません。状態の損失は問題です。何かがプロジェクトをリセットした場合(ワークブックを閉じてから再度開くなど)、状態を保持しません。私は、state = 0
という行をstate = Application.Caller.Value
に置き換えて実験しました。これが問題であれば、間違いなく何かをしてWorkBook_Open()
状態を復元することができます。
すべての目的と目的で、タイムシートのWorksheet_Changeの問題と同じです。 – Jeeped