MESCIUS SPREAD for Windows Forms 17.0J > 開発者ガイド > 数式 > 参照セルと依存セル |
SPREAD for Windows Formsを使用すると、スプレッドシートの参照セルと依存セルを追跡できます。
参照セルと依存セルの追跡は、計算の問題を確認したり、数式をデバッグしたり、結果の精度を検証したりするのに役立ちます。選択した数式セルに関連するセルを表示し、セルの値が変更された場合に影響を受けるセルを確認することもできます。
セルの直接参照セルを追跡するには、IRangeインタフェースのShowPrecedentsメソッドを使用できます。次の画像で示すように参照セルへの関係矢印を表示します。
IRangeインタフェースのDirectPrecedentsプロパティを使用して、セルのすべての直接参照セルを持つ範囲を表す範囲オブジェクトも取得できます。
次のサンプルコードは、ShowPrecedentsメソッドおよびDirectPrecedentsプロパティの使用方法を示します。
C# |
コードのコピー
|
---|---|
// セルE2に数式を設定します。 fpSpread1.Sheets[0].Cells["E2"].Formula = "Sum(C1:C2, C5)"; // セルC1に数式を設定します。 fpSpread1.Sheets[0].Cells["C1"].Formula = "B1"; // セルB1に数式を設定します。 fpSpread1.Sheets[0].Cells["B1"].Formula = "Sum(A1:A2)"; // セルに値を設定します。 fpSpread1.Sheets[0].Cells["A1"].Value = 1; fpSpread1.Sheets[0].Cells["A2"].Value = 2; fpSpread1.Sheets[0].Cells["C2"].Value = 3; fpSpread1.Sheets[0].Cells["C5"].Value = 4; // セルE2の参照セルを表示します。 fpSpread1.ShowPrecedents(0, 1, 4); // セルE2の直接参照セル IRange DirectPrecedents = fpSpread1.AsWorkbook().Worksheets[0].Cells["E2"].DirectPrecedents; listBox1.Items.Add("セルE2の直接参照セル:"); int areas1 = DirectPrecedents.Areas.Count; for (int i = 0; i < areas1; i++) { ?listBox1.Items.Add(DirectPrecedents.Areas[i].ToString()); } // 出力 // セルE2の直接参照セル: // [fpSpread1]Sheet1!$C$1:$C$2 // [fpSpread1]Sheet1!$C$5 |
VB |
コードのコピー
|
---|---|
'セルE2に数式を設定します。 FpSpread1.Sheets(0).Cells("E2").Formula = "Sum(C1:C2, C5)" 'セルC1に数式を設定します。 FpSpread1.Sheets(0).Cells("C1").Formula = "B1" 'セルB1に数式を設定します。 FpSpread1.Sheets(0).Cells("B1").Formula = "Sum(A1:A2)" 'セルに値を設定します。 FpSpread1.Sheets(0).Cells("A1").Value = 1 FpSpread1.Sheets(0).Cells("A2").Value = 2 FpSpread1.Sheets(0).Cells("C2").Value = 3 FpSpread1.Sheets(0).Cells("C5").Value = 4 'セルE2の参照セルを表示します。 FpSpread1.ShowPrecedents(0, 1, 4) 'セルE2の直接参照セル Dim DirectPrecedents As IRange = FpSpread1.AsWorkbook().Worksheets(0).Cells("E2").DirectPrecedents listBox1.Items.Add("セルE2の直接参照セル:") Dim areas1 As Integer = DirectPrecedents.Areas.Count For i As Integer = 0 To areas1 - 1 listBox1.Items.Add(DirectPrecedents.Areas(i).ToString()) Next '出力 'セルE2の直接参照セル: '[fpSpread1]Sheet1!$C$1$C$2 '[fpSpread1]Sheet1!$C$5 |
選択セルの外部ワークブック参照を含めてすべての参照セルを表示するには、IRangeインタフェースのGetFullPrecedentsメソッドを使用します。次の画像は、外部参照を含む参照セルの追跡を示します。
代わりに、IRangeインタフェースのPrecedentsプロパティを使用することでも、セルのすべての参照セルを表す範囲オブジェクトを返却できます。ただし、このプロパティの場合外部参照が追跡されません。
次の画像は、GetFullPrecedentsメソッドとPrecedentsプロパティの使用方法を示します。
C# |
コードのコピー
|
---|---|
// 値を設定します。 fpSpread1.Sheets[0].Cells[1, 1].Value = "56"; fpSpread1.Sheets[0].SetValue(3, 2, 11); fpSpread2.Sheets[0].SetValue(2, 2, 10); fpSpread2.Sheets[0].SetValue(3, 2, 20); fpSpread1.Sheets[0].Cells[0, 0].Formula = "C4"; // // workbook2にて、workbook1のセルを参照する外部セル参照式を割り当てます。 fpSpread2.Sheets[0].Cells[1, 1].Formula = "[Book1]Sheet1!B2"; fpSpread2.Sheets[0].SetFormula(1, 3, "SUM([Book1]Sheet1!C3:C4)"); fpSpread1.Sheets[0].SetFormula(2, 2, "Sum([Book2]Sheet1!C3:C4)"); // cross worksheet formula fpSpread1.Sheets[1].Cells[0, 0].Formula = "Sheet1!B2"; // クロスワークシート数式を割り当てます。 // fpSpread1.Sheets(0)のセルC3の参照セルを取得します。 IRange[] FullPrecedents = fpSpread1.AsWorkbook().Worksheets[0].Cells["C3"].GetFullPrecedents(); //MessageBox.Show(FullPrecedents.ToString()); listBox1.Items.Add("FullPrecedents of Cell C3 of fpSpread1.Sheets[0] are : "); listBox1.Items.Add(FullPrecedents.GetValue(0).ToString()); // 同じワークシート内のクロスワークシート参照 // fpSpread2.Sheets(0)のセルB2の参照セルを取得します。 listBox1.Items.Add("FullPrecedents of Cell B2 of fpSpread2.Sheets[0] are : "); IRange[] FullPrecedents1 = fpSpread2.AsWorkbook().Worksheets[0].Cells["B2"].GetFullPrecedents(); listBox1.Items.Add(FullPrecedents1.GetValue(0).ToString()); // セルA1の参照セル listBox1.Items.Add("Precedents of Cell A1 : " + fpSpread1.AsWorkbook().Worksheets[0].Cells["A1"].Precedents[0]); // 出力 // セルC3の参照セル: [Book1]Sheet1!$C$4 |
VB |
コードのコピー
|
---|---|
'値を設定します。 FpSpread1.Sheets(0).Cells(1, 1).Value = "56" FpSpread1.Sheets(0).SetValue(3, 2, 11) FpSpread2.Sheets(0).SetValue(2, 2, 10) FpSpread2.Sheets(0).SetValue(3, 2, 20) FpSpread1.Sheets(0).Cells(0, 0).Formula = "C4" 'workbook2にて、workbook1のセルを参照する外部セル参照式を割り当てます。 FpSpread2.Sheets(0).Cells(1, 1).Formula = "[Book1]Sheet1!B2" FpSpread2.Sheets(0).SetFormula(1, 3, "SUM([Book1]Sheet1!C3:C4)") FpSpread1.Sheets(0).SetFormula(2, 2, "Sum([Book2]Sheet1!C3:C4)") 'クロスワークシート数式を割り当てます。 FpSpread1.Sheets(1).Cells(0, 0).Formula = "Sheet1!B2" 'クロスワークブック参照 'fpSpread1.Sheets(0)のセルC3の参照セルを取得します。 Dim FullPrecedents As IRange() = FpSpread1.AsWorkbook().Worksheets(0).Cells("C3").GetFullPrecedents(False) 'MessageBox.Show(FullPrecedents.ToString()); ListBox1.Items.Add("FullPrecedents of Cell C3 of fpSpread1.Sheets(0) are : ") ListBox1.Items.Add(FullPrecedents.GetValue(0).ToString()) '同じワークシート内のクロスワークシート参照 'fpSpread2.Sheets(0)のセルB2の参照セルを取得します。 ListBox1.Items.Add("FullPrecedents of Cell B2 of fpSpread2.Sheets(0) are : ") Dim FullPrecedents1 As IRange() = FpSpread2.AsWorkbook().Worksheets(0).Cells("B2").GetFullPrecedents() ListBox1.Items.Add(FullPrecedents1.GetValue(0).ToString()) 'セルA1の参照セル ListBox1.Items.Add("Precedents of Cell A1 : ") ListBox1.Items.Add(FpSpread1.AsWorkbook().Worksheets(0).Cells("A1").Precedents(0)) '出力 'セルC3の参照セル : '[Book2]Sheet1!$C$4 |
GetFullPrecedentsメソッドでexcludeUnlinkedWorksheetのパラメータも提供され、ワークブックセットにロードされていないワークブックへの参照セルを除外します。パラメータのデフォルト値はtrueですが、falseに設定されている場合、現在WorkbookSetにロードされていない他のワークブックの外部ワークシートからの参照セルが含まれます。
C# |
コードのコピー
|
---|---|
// fpSpread1のセルE2にfpSpread2への参照を含む外部数式を設定します。 fpSpread1.Sheets[0].Cells["A1"].Value = 2000; fpSpread1.Sheets[0].Cells["E2"].Formula = "A1 + [fpSpread2]Sheet1!A1"; // fpSpread2のセルA1に値を設定します。 fpSpread2.Sheets[0].Cells["A1"].Value = 1000; // ワークブックセットに2つのSpreadコントロールを追加します。 fpSpread1.AsWorkbook().WorkbookSet.Workbooks.Add(fpSpread2.AsWorkbook()); // fpSpread2のリンクをワークブックセットから解除します。 fpSpread2.AsWorkbook().Close(); // リンクされていないワークシートを除外して参照セルを取得します。 listBox1.Items.Add("GetFullPrecedents of Cell E2 WITHOUT broken link :"); IRange[] precedents = fpSpread1.AsWorkbook().Worksheets[0].Cells["E2"].GetFullPrecedents(true); // 出力 // セルE2のリンク切れのない参照セルを取得します。 // [fpSpread1]Sheet1!$A$1 // リンクされていないワークシートを含めて参照セルを取得します。 listBox1.Items.Add("GetFullPrecedents of Cell E2 WITH broken link - ExternalReference item(s) may be listed :"); IRange[] precedents2 = fpSpread1.AsWorkbook().Worksheets[0].Cells["E2"].GetFullPrecedents(false); // 出力 // セルE2のリンク切れを含む参照セル(外部参照がリストされる場合があります): // GrapeCity.Spreadsheet.API.ExternalRange // [fpSpread1]Sheet1!$A$1 |
VB |
コードのコピー
|
---|---|
'fpSpread1のセルE2にfpSpread2への参照を含む外部数式を設定します。 FpSpread1.Sheets(0).Cells("A1").Value = 2000 FpSpread1.Sheets(0).Cells("E2").Formula = "A1 + [fpSpread2]Sheet1!A1" 'fpSpread2のセルA1に値を設定します。 FpSpread2.Sheets(0).Cells("A1").Value = 1000 'ワークブックセットに2つのSpreadコントロールを追加します。 FpSpread1.AsWorkbook().WorkbookSet.Workbooks.Add(FpSpread2.AsWorkbook()) 'fpSpread2のリンクをワークブックセットから解除します。 FpSpread2.AsWorkbook().Close() 'リンクされていないワークシートを除外して参照セルを取得します。 ListBox1.Items.Add("GetFullPrecedents of Cell E2 WITHOUT broken link :") Dim precedents As IRange() = FpSpread1.AsWorkbook().Worksheets(0).Cells("E2").GetFullPrecedents(True) 'リンクされていないワークシートを除外して参照セルを取得します。 'セルE2のリンク切れのない参照セルを取得します。 '[fpSpread1]Sheet1!$A$1 'リンクされていないワークシートを含めて参照セルを取得します。 ListBox1.Items.Add("GetFullPrecedents of Cell E2 WITH broken link - ExternalReference item(s) may be listed :") Dim precedents2 As IRange() = FpSpread1.AsWorkbook().Worksheets(0).Cells("E2").GetFullPrecedents(False) '出力 'セルE2のリンク切れを含む参照セル(外部参照がリストされる場合があります): 'GrapeCity.Spreadsheet.API.ExternalRange '[fpSpread1]Sheet1!$A$1 |
セルの直接依存セルを追跡するには、IRangeインタフェースのShowDependentsメソッドを使用できます。次の画像で示すように、依存セルへ関係矢印を表示します。
セルのすべての直接依存セルを持つ範囲を表す範囲オブジェクトを取得するには、IRangeインタフェースのDirectDependentsプロパティを使用できます。
次のサンプルコードは、ShowDependentsメソッドとDirectDependentsプロパティの実装方法を示します。
C# |
コードのコピー
|
---|---|
// 数式を設定します。 fpSpread1.Sheets[1].Cells[0, 0].Formula = "B2+B3"; fpSpread1.Sheets[1].Cells["C1"].Formula = "A1"; fpSpread1.Sheets[1].Cells["C2"].Formula = "A1"; fpSpread1.Sheets[1].Cells["D1"].Formula = "A1"; fpSpread1.Sheets[1].Cells["F1"].Formula = "A1"; fpSpread1.Sheets[1].Cells["G1"].Formula = "A1"; fpSpread1.Sheets[1].Cells["E1"].Formula = "D1"; // セル値を設定します。 fpSpread1.Sheets[1].Cells["B2"].Value = 1; fpSpread1.Sheets[1].Cells["B3"].Value = 2; // セルA1の依存セルを表示します。 fpSpread1.ShowDependents(1, 0, 0); // セルA1の直接依存セルを表示します。 IRange DirectDependents = fpSpread1.AsWorkbook().Worksheets[1].Cells["A1"].DirectDependents; listBox1.Items.Add("DirectDependents of Cell A1 are :"); int areas1 = DirectDependents.Areas.Count; for (int i = 0; i < areas1; i++) { ?listBox1.Items.Add(DirectDependents.Areas[i].ToString()); } // 出力 // セルA1の直接依存セル: // [fpSpread1]Sheet2!$C$1:$C$2 // [fpSpread1]Sheet2!$D$1 // [fpSpread1]Sheet2!$F$1:$G$1 |
VB |
コードのコピー
|
---|---|
'数式を設定します。 FpSpread1.Sheets(1).Cells(0, 0).Formula = "B2+B3" FpSpread1.Sheets(1).Cells("C1").Formula = "A1" FpSpread1.Sheets(1).Cells("C2").Formula = "A1" FpSpread1.Sheets(1).Cells("D1").Formula = "A1" FpSpread1.Sheets(1).Cells("F1").Formula = "A1" FpSpread1.Sheets(1).Cells("G1").Formula = "A1" FpSpread1.Sheets(1).Cells("E1").Formula = "D1" 'セル値を設定します。 FpSpread1.Sheets(1).Cells("B2").Value = 1 FpSpread1.Sheets(1).Cells("B3").Value = 2 'セルA1の依存セルを表示します。 FpSpread1.ShowDependents(1, 0, 0) 'セルA1の直接依存セルを表示します。 Dim DirectDependents As IRange = FpSpread1.AsWorkbook().Worksheets(1).Cells("A1").DirectDependents ListBox1.Items.Add("DirectDependents of Cell A1 are :") Dim areas1 As Integer = DirectDependents.Areas.Count For i As Integer = 0 To areas1 - 1 ListBox1.Items.Add(DirectDependents.Areas(i).ToString()) Next '出力 'セルA1の直接依存セル: '[fpSpread1]Sheet2!$C$1$C$2 '[fpSpread1]Sheet2!$D$1 '[fpSpread1]Sheet2!$F$1:$G$1 |
選択セルの外部ワークブック参照を含めてすべての依存セルを表示するには、IRangeインタフェースのGetFullDependentsメソッドを使用します。次の画像は、外部参照を含む依存セルの追跡を示します。
代わりに、IRangeインタフェースのDependentsプロパティを使用することでも、すべての依存セルを返却できます。ただし、このプロパティの場合外部参照が追跡されません。
次の画像は、GetFullDependentsメソッドとDependentsプロパティの使用方法を示します。
C# |
コードのコピー
|
---|---|
// 値を設定します。 fpSpread1.Sheets[0].Cells[1, 1].Value = "56"; fpSpread1.Sheets[0].SetValue(3, 2, 11); fpSpread2.Sheets[0].SetValue(2, 2, 10); fpSpread2.Sheets[0].SetValue(3, 2, 20); fpSpread1.Sheets[0].Cells[0, 0].Formula = "C4"; // workbook2にてworkbook1のセルを参照している外部セル参照数式を割り当てます。 fpSpread2.Sheets[0].Cells[1, 1].Formula = "[Book1]Sheet1!B2"; fpSpread2.Sheets[0].SetFormula(1, 3, "SUM([Book1]Sheet1!C3:C4)"); fpSpread1.Sheets[0].SetFormula(2, 2, "Sum([Book2]Sheet1!C3:C4)"); // クロスワークシート数式 fpSpread1.Sheets[1].Cells[0, 0].Formula = "Sheet1!B2"; // fpSpread2.Sheets[0]のセルC4 のすべての依存セルを取得します。 listBox1.Items.Add("FullDependents of Cell C4 of fpSpread2.Sheets[0] are : "); IRange[] FullDependents = fpSpread2.AsWorkbook().Worksheets[0].Cells["C4"].GetFullDependents(); listBox1.Items.Add(FullDependents.GetValue(0).ToString()); listBox1.Items.Add(FullDependents.GetValue(1).ToString()); // セルC4の依存セル IRange Dependents = fpSpread1.AsWorkbook().Worksheets[1].Cells["C4"].Dependents; listBox1.Items.Add("Dependents of Cell C4 are :"); int areas = Dependents.Areas.Count; for (int i = 0; i < areas; i++) { listBox1.Items.Add(Dependents.Areas[i].ToString()); } // 出力 // セルC4 の依存セル : // [Book1]Sheet1!$A$1 |
VB |
コードのコピー
|
---|---|
'値を設定します。 FpSpread1.Sheets(0).Cells(1, 1).Value = "56" FpSpread1.Sheets(0).SetValue(3, 2, 11) FpSpread2.Sheets(0).SetValue(2, 2, 10) FpSpread2.Sheets(0).SetValue(3, 2, 20) FpSpread1.Sheets(0).Cells(0, 0).Formula = "C4" 'workbook2にてworkbook1のセルを参照している外部セル参照数式を割り当てます。 FpSpread2.Sheets(0).Cells(1, 1).Formula = "[Book1]Sheet1!B2" FpSpread2.Sheets(0).SetFormula(1, 3, "SUM([Book1]Sheet1!C3:C4)") FpSpread1.Sheets(0).SetFormula(2, 2, "Sum([Book2]Sheet1!C3:C4)") 'クロスワークシート数式 FpSpread1.Sheets(1).Cells(0, 0).Formula = "Sheet1!B2" 'fpSpread2.Sheets[0]のセルC4 のすべての依存セルを取得します。 ListBox1.Items.Add("FullDependents of Cell C4 of fpSpread2.Sheets(0) are : ") Dim FullDependents As IRange() = FpSpread2.AsWorkbook().Worksheets(0).Cells("C4").GetFullDependents() ListBox1.Items.Add(FullDependents.GetValue(0).ToString()) ListBox1.Items.Add(FullDependents.GetValue(1).ToString()) 'セルC4の依存セル Dim Dependents As IRange = FpSpread1.AsWorkbook().Worksheets(1).Cells("C4").Dependents ListBox1.Items.Add("Dependents of Cell C4 are :") Dim areas1 As Integer = Dependents.Areas.Count For i As Integer = 0 To areas1 - 1 ListBox1.Items.Add(Dependents.Areas(i).ToString()) Next '出力 'セルC4 の依存セル : '[Book1]Sheet1!$A$1 |