M+電卓のボタンのようなものを作りたいです。
入力値を変更または削除したときに数式の出力値が上書きされないようにしたいのですが、代わりに新しい入力で数式で再び使用されます。うまくいけば、これは理にかなっています。
別の方法では、出力値を同じ式(単純な加算式)の新しい入力値で使用する必要があります。
おそらく、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
私は置けば=PlusM(A1)
A1が最初に空白の場合A2に、私はその後、A2は今、その値が表示されますA1に任意の値を入力した場合、A2は0が表示されます。次にA1の値を削除すると、A2はその値を保持します。次にA1に新しい値を入力すると、A2は古い値+ A1からの新しい値を表示します。辞書を使用すると、=PlusM()
あるセルの状態が別のセルの状態に漏れることなく、さまざまなセルにインスタンスを作成できます。
これは最も堅牢なソリューションではありません。状態の喪失が問題です。何かがプロジェクトをリセットした場合(ワークブックを閉じてから再度開くことを含む)、状態は保持されません。私はラインを交換して実験してきたstate = 0
とのstate = Application.Caller.Value
混合の結果で。これが問題である場合、WorkBook_Open()
状態を復元するために何かが行われる可能性があることは間違いありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加