5

Excelの計算順序に奇妙な問題があります。範囲をダーティに設定すると、従属セルが前のセルの前に空のパラメーター値で計算されます。それらの「偽の」呼び出しを検出する方法はありますか?実世界のアプリケーションでいくつかの巧妙なビジネスロジックを実行し、それらの「偽の」呼び出しがすべてのロジックを壊すので、それは私にとって重要です。さらに、RTDに登録されている場合、これらの「偽の」呼び出しはトピックに適切にバインドされないため、トピックの切断を通知しません。

Excel 2010/32ビット最新すべて。

問題を説明するために、単純な関数を作成しました。

Function Fnc(param2 As String) As String
    Fnc = Application.ThisCell.Address
    Debug.Print (Application.ThisCell.Address & " - " & param2)
End Function

そして手順:

Sub SetDirty()
    Range("B1:C1").Dirty
End Sub

そして簡単なシート:

$ A $ 1 = fnc(A1)= fnc(B1)

セルA1、B1、C1に。

そして明らかに結果:

$ A $ 1 $ B $ 1 $ C $ 1

CTRL+ Alt+ Shift+ F9)を再計算すると、予想どおりに次のようになります。

$ B $ 1-$ A $ 1

$ C $ 1-$ B $ 1

しかし、ここで楽しい部分があります。SetDirtyを実行した場合:

$ C $ 1-<----これはどこから来たのですか?

$ B $ 1-$ A $ 1

$ C $ 1-$ B $ 1

ご入力いただきありがとうございます。すでに一連の回避策の一部であるため、回避策ではなく、この問題を解決するソリューションをお勧めします。

4

1 に答える 1

6

多くの場合、セルは複数回再計算されます。Excelは、前の計算シーケンスに、変更されたすべてのセルのLIFO(後入れ先出し)を加えた再計算シーケンスで開始します。これにより、関数が呼び出され、計算されていないセルが与えられます。関数は後で再度呼び出されます。
IsEmptyを使用してUDF内の計算されていないセルを検出できます。UDF
の詳細と計算されていないセルの検出についてはhttp://www.decisionmodels.com/calcsecretsj.htmを、Excelの詳細についてはhttp://www.decisionmodels.com/calcsecretsc.htmを参照してください。計算シーケンス。ところで、Range.Dirtyには注意してください-少しバグがあります


于 2012-06-01T08:03:51.270 に答える