PowerTools SPREAD for Windows Forms 10.0J > 開発者ガイド > 数式 > 循環参照 |
数式では、その数式自身が含まれるセルを参照することができます。これを循環参照と呼びます。循環参照は通常、1つの関数を反復実行することで、演算結果を最適な値に近づけようとする目的で使用します。SheetViewクラスのMaximumIterationsプロパティで、再計算の反復回数を設定します。この設定により、関数が自身を繰り返し演算(反復)する回数が決まります。また、SheetViewクラスのMaximumChangeプロパティで、計算を停止する基準となる、最大の変化量を設定することもできます。
たとえば、セルC4内に「=COLUMNS(A1:C5)」という数式を設定すると、評価結果は返されません。つまり、配列内の最後の行および列インデックスが、数式の入力されたセルの行および列インデックスより大きい場合、この数式は計算できなくなります。この例では、セルC4 はセル範囲 A1:C5 内に含まれています。これが、数式内に循環参照が含まれる例であり、反復計算が有効にされていない限り、この数式は評価されません。
表計算に関する多くの製品(Excel、OpenOfficeを含む)と同様、製品では反復計算を使用して循環参照の式を解決します。1回の再計算サイクルで、反復計算が指定の回数だけ実行されます。1回の反復計算では、1つの循環参照式は一度だけ評価されます。1回の反復計算中に循環参照式が評価される正確な順序は、アプリケーション側で判断することはできません。多くの製品と同様、製品の循環参照式は、反復計算での評価順序とは関係なく、反復計算によって必要な解に収束させることを目的としています。
次のサンプルコードは循環参照を使用した数式を設定します。
C# |
コードのコピー
|
---|---|
fpSpread1.ActiveSheet.Iteration = true; fpSpread1.ActiveSheet.SetValue(0, 1, 20); fpSpread1.ActiveSheet.MaximumChange = 5; fpSpread1.ActiveSheet.MaximumIterations = 5; fpSpread1.ActiveSheet.SetFormula(0, 2, "A1*3"); fpSpread1.ActiveSheet.SetFormula(0, 0, "B1+C1"); |
Visual Basic |
コードのコピー
|
---|---|
FpSpread1.ActiveSheet.Iteration = True FpSpread1.ActiveSheet.SetValue(0, 1, 20) FpSpread1.ActiveSheet.MaximumChange = 5 FpSpread1.ActiveSheet.MaximumIterations = 5 FpSpread1.ActiveSheet.SetFormula(0, 0, "B1+C1") FpSpread1.ActiveSheet.SetFormula(0, 2, "A1*3") |