2012-05-31 21 views
5

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

Excel 2010/32bit最新のすべてです。

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)はIは、予想を受けると:

$ B $ 1 - $ A $ 1

$ C $ 1 - $ B $ 1

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

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

$ B 1 $ - $ A $ 1

$ C $ 1 - $ B $ 1

任意の入力いただきありがとうございます。私はこの問題を解決するソリューションを好むだろうが、これは既に回避策の一部であるため、回避策ではない。

+1

このページ:http://www.decisionmodels.com/calcsecretsc.htm、および他のサイトであなたの質問に答えてください。著者はSatckoverflowのレギュラーでもあります。 – jtolle

+0

Excelのセルに何を入れているのかわかりません。あなたがスクリーンショットを撮ったり、あなたの例を明確にしたりしていますか? – brettdj

+0

@brettdj私が私の記事で言ったように:$ A $ 1 = fnc(A1)= fnc(B1)をA1、B1、C1というセルに単純に入れると、 – Arnas

答えて

6

セルはしばしば複数回再計算されます。Excelは、すべての変更されたセルの前回の計算シーケンスにLIFO(後入れ先出し)を加えた再計算シーケンスで開始します。 これにより、関数が呼び出され、未計算のセルが与えられます。関数は後で呼び出されます。
あなたはUDFのの詳細についてはisEmpty
参照http://www.decisionmodels.com/calcsecretsj.htmを使用してExcelの計算手順の詳細については、未計算セル
http://www.decisionmodels.com/calcsecretsc.htmを検出し、あなたのUDFに未計算の細胞を検出することができます。

こちらは、Range.Dirtyに注意してください。ちょっとバグがあります。

+0

私はC#を使用していますが、Cell HasFormulaの場合はnullをチェックするだけですか? – Arnas

+0

私はC#(VBA、VB6、C++のみ)を使用していませんので、私はそれに答えることができません。値がnullの場合、空のセルが検出されるかどうかを確認してください。なぜIsEmptyを使用しないのですか?http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.value.aspx –

+0

IsEmptyはVBA関数です。 Excelは決して式からnullを渡しません。 nullは2つのケースにしかありません。セルは空であるか、計算式は計算されません。私が間違っていれば私を修正してください。 – Arnas

関連する問題