DioDocs for Excel
DioDocs for Excel
参照元セルと参照先セル
機能 > 数式 > 参照元セルと参照先セル

多くの数式を含むワークシートでは、数式を計算するときに考慮されるセル値または範囲、およびセル値が変更されたときにどのセルに影響があることを識別するのが困難になる場合があります。このようなシナリオでは、参照元セルと参照先セルを使用すると便利です。DioDocs for Excelでは、IRangeインタフェースのGetPrecedentsメソッドとGetDependentsメソッドを使用して、ワークシートの参照元セルと参照先セルまたは範囲を識別できます。

たとえば、セル A1 = 10、A2 = 20、B1 = Sum(A1 + A2)の場合は、セル A1 と A2 はセル B1 の参照元セルで、セル B1 の値を計算します。また、セル B1 はセル A1 と A2 の参照先セルで、その値はセル A1 と A2 の値に基づいて計算されます。

参照元セル

ワークシート内の参照元セルを取得する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
public void GetPrecedents()
{
    // ワークブックを初期化します
    Workbook workbook = new Workbook();
    // 既定のワークシートを取得します 
    IWorksheet worksheet = workbook.Worksheets[0];

    // セル E2 に数式を設定します
    worksheet.Range["E2"].Formula = "=sum(A1:A2, B4,C1:C3)";
    // セルの値を設定します
    worksheet.Range["A1"].Value = 1;
    worksheet.Range["A2"].Value = 2;
    worksheet.Range["B4"].Value = 3;
    worksheet.Range["C1"].Value = 4;
    worksheet.Range["C2"].Value = 5;
    worksheet.Range["C3"].Value = 6;

    // セル範囲E2の参照元セルを取得します
    foreach (var item in worksheet.Range["E2"].GetPrecedents())
    {
        item.Interior.Color = Color.Pink;
    }

    // ワークブックをXLSXファイルに保存します
    workbook.Save(@"Precedents.xlsx", SaveFileFormat.Xlsx);

}

以下の画像は、参照元セル範囲を表示します。(ピンク色で強調表示されています)

 

参照先セル

ワークシート内の参照先セルを取得する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
public void GetDependents()
{
    // ワークブックを初期化します
    Workbook workbook = new Workbook();
    // 既定のワークシートを取得します 
    IWorksheet worksheet = workbook.Worksheets[0];

    // セル A1 の値を設定します
    worksheet.Range["A1"].Value = 100;
    // セル C1 に数式を設定します
    worksheet.Range["C1"].Formula = "=$A$1";
    // セル範囲E1:E5で数式を設定します
    worksheet.Range["E1:E5"].Formula = "=$A$1";

    // セル範囲A1の参照先セルを取得します
    foreach (var item in worksheet.Range["A1"].GetDependents())
    {
        item.Interior.Color = Color.LightGreen;
    }

    // ワークブックをXLSXファイルに保存します
    workbook.Save(@"Dependents.xlsx", SaveFileFormat.Xlsx);
}

以下の画像は、参照先セル範囲を表示します。(緑色で強調表示されています)

すべての参照元セル

多くの場合は、複数の参照先セル範囲がセルの数式を計算するときにに使用されます。ワークシートのすべての参照先セル範囲を取得する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
public void GetAllPrecedents()
{
    // ワークブックを初期化します
    Workbook workbook = new Workbook();
    // 既定のワークシートを取得します 
    IWorksheet worksheet = workbook.Worksheets[0];

    // セル E2 に数式を設定します
    worksheet.Range["E2"].Formula = "=sum(C1:C2)";
    // セル C1 に数式を設定します
    worksheet.Range["C1"].Formula = "=B1";
    // セル B1 に数式を設定します
    worksheet.Range["B1"].Formula = "=sum(A1:A2)";
    // セルの値を設定します
    worksheet.Range["A1"].Value = 1;
    worksheet.Range["A2"].Value = 2;
    worksheet.Range["C2"].Value = 3;

    // セル範囲E2の参照元セルを取得します
    List<IRange> list = new List<IRange>();
    foreach (var item in worksheet.Range["E2"].GetPrecedents())
    {
        list.Add(item);
    }

    while (list.Count > 0)
    {
        var temp = list;
        list = new List<IRange>();
        foreach (var item in temp)
        {
            for (int i = 0; i < item.RowCount; i++)
            {
                for (int j = 0; j < item.ColumnCount; j++)
                {
                    var dependents = item.Cells[i, j].GetPrecedents();
                    if (dependents.Count == 0)
                    {
                        item.Cells[i, j].Interior.Color = Color.SkyBlue;
                    }
                    else
                    {
                        item.Cells[i, j].Interior.Color = Color.LightGreen;
                        list.AddRange(dependents);
                    }
                }
            }
        }
    }

    // ワークブックをXLSXファイルに保存します
    workbook.Save(@"GetAllPrecedents.xlsx", SaveFileFormat.Xlsx);
}

以下の画像は、すべての参照元セル範囲を表示します。(青と緑色で強調表示されています)