2016-03-26 17 views
1

電卓にM +ボタンを作成したいと思います。Excel - 入力が削除されても式の出力値を永久にする必要があります

入力値を変更または削除する代わりに、新しい入力とともに式で再び使用される場合、式の出力値を上書きしないようにします。うまくいけば、これは理にかなっている。

他の方法では、同じ式(これは簡単な加算式)の新しい入力値で出力値を使用します。

+1

すべての目的と目的で、タイムシートのWorksheet_Changeの問題と同じです。 – Jeeped

答えて

0

おそらく、あなたは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()状態を復元することができます。

関連する問題