Excel JavaScript API を使用して数式の優先順位と依存を取得する

Excel 数式には、多くの場合、同じワークシートまたはブック内の他のセルへの参照が含まれます。 これらのセル間参照は、"precedents" と "dependents" と呼ばれます。 優先順位は、数式にデータを提供するセルです。 依存は、他のセルを参照する数式を含むセルです。 Excel UI のトレースの優先順位や依存に関連する機能 ( トレースの優先順位依存トレースなど) の詳細については、「 数式とセル間のリレーションシップを表示する」を参照してください。

前例セルには、独自の前例セルが含まれる場合があります。 この優先順位のチェーン内のすべての優先順位セルは、元のセルの優先順位のままです。 従属関係にも同じ関係が存在します。 別のセルの影響を受けるセルは、そのセルに依存します。 "直接の前例" は、親子関係の親の概念と同様に、このシーケンス内のセルの最初の先行するグループです。 "直接依存" は、親子関係の子と同様に、シーケンス内のセルの最初の依存グループです。

この記事では、Excel JavaScript API を使用して数式の優先順位と依存を取得するコード サンプルを提供します。 オブジェクトがサポートする Range プロパティとメソッドの完全な一覧については、「 Range Object (JavaScript API for Excel)」を参照してください。

数式の前例を取得する

Range.getPrecedents を使用して、数式の先行セルを見つけます。 Range.getPrecedents は オブジェクトを WorkbookRangeAreas 返します。 このオブジェクトには、ブック内のすべての優先順位のアドレスが含まれています。 これには、少なくとも 1 つの数式の優先順位を含むワークシートごとに個別 RangeAreas のオブジェクトがあります。 オブジェクトの RangeAreas 詳細については、「 Excel アドインで複数の範囲を同時に操作する」を参照してください。

数式の直接の優先順位のセルのみを検索するには、 Range.getDirectPrecedents を使用します。 Range.getDirectPrecedents は 同様 Range.getPrecedents に機能し、 WorkbookRangeAreas 直接の優先順位のアドレスを含むオブジェクトを返します。

次のスクリーンショットは、Excel UI で [ トレースの優先順位 ] ボタンを選択した結果を示しています。 このボタンは、前のセルから選択したセルへの矢印を描画します。 選択したセル E3 には数式 "=C3 * D3" が含まれているため、C3 と D3両方が優先セルになります。 Excel UI ボタンとは異なり、 getPrecedents メソッドと getDirectPrecedents メソッドは矢印を描画しません。

Excel UI で優先順位の高いセルをトレースする矢印。

重要

getPrecedentsメソッドと getDirectPrecedents メソッドは、ブック間で優先順位の高いセルを取得しません。

次のコード サンプルは、 メソッドと Range.getDirectPrecedents メソッドを操作する方法をRange.getPrecedents示しています。 このサンプルでは、アクティブな範囲の優先順位を取得し、それらの前例セルの背景色を変更します。 直接の前例セルの背景色は黄色に設定され、他の前例セルの背景色はオレンジに設定されます。

// This code sample shows how to find and highlight the precedents 
// and direct precedents of the currently selected cell.
await Excel.run(async (context) => {
  let range = context.workbook.getActiveCell();
  // Precedents are all cells that provide data to the selected formula.
  let precedents = range.getPrecedents();
  // Direct precedents are the parent cells, or the first preceding group of cells that provide data to the selected formula.    
  let directPrecedents = range.getDirectPrecedents();

  range.load("address");
  precedents.areas.load("address");
  directPrecedents.areas.load("address");
  
  await context.sync();

  console.log(`All precedent cells of ${range.address}:`);
  
  // Use the precedents API to loop through all precedents of the active cell.
  for (let i = 0; i < precedents.areas.items.length; i++) {
    // Highlight and print out the address of all precedent cells.
    precedents.areas.items[i].format.fill.color = "Orange";
    console.log(`  ${precedents.areas.items[i].address}`);
  }

  console.log(`Direct precedent cells of ${range.address}:`);

  // Use the direct precedents API to loop through direct precedents of the active cell.
  for (let i = 0; i < directPrecedents.areas.items.length; i++) {
    // Highlight and print out the address of each direct precedent cell.
    directPrecedents.areas.items[i].format.fill.color = "Yellow";
    console.log(`  ${directPrecedents.areas.items[i].address}`);
  }
});

数式の依存を取得する

Range.getDependents を使用して、数式の依存セルを見つけます。 と同様Range.getPrecedentsに、オブジェクトも返しますWorkbookRangeAreasRange.getDependents このオブジェクトには、ブック内のすべての依存オブジェクトのアドレスが含まれています。 これには、少なくとも 1 つの数式に依存するワークシートごとに個別 RangeAreas のオブジェクトがあります。 オブジェクトの操作 RangeAreas の詳細については、「 Excel アドインで複数の範囲を同時に操作する」を参照してください。

数式の直接依存セルのみを検索するには、 Range.getDirectDependents を使用します。 Range.getDirectDependents は 同様 Range.getDependents に機能し、 WorkbookRangeAreas 直接依存のアドレスを含む オブジェクトを返します。

次のスクリーンショットは、Excel UI で [ トレース依存 ] ボタンを選択した結果を示しています。 このボタンは、選択したセルから依存セルへの矢印を描画します。 選択したセル D3 は、従属セルとして セル E3 を持っています。 E3 には、"=C3 * D3" という数式が含まれています。 Excel UI ボタンとは異なり、 getDependents メソッドと getDirectDependents メソッドは矢印を描画しません。

Excel UI で依存セルをトレースする矢印。

重要

getDependentsメソッドと getDirectDependents メソッドは、ブック間で依存するセルを取得しません。

次のコード サンプルは、 メソッドと Range.getDirectDependents メソッドを操作する方法をRange.getDependents示しています。 このサンプルでは、アクティブな範囲の依存を取得し、それらの依存セルの背景色を変更します。 直接依存セルの背景色は黄色に設定され、他の従属セルの背景色はオレンジ色に設定されます。

// This code sample shows how to find and highlight the dependents 
// and direct dependents of the currently selected cell.
await Excel.run(async (context) => {
    let range = context.workbook.getActiveCell();
    // Dependents are all cells that contain formulas that refer to other cells.
    let dependents = range.getDependents();  
    // Direct dependents are the child cells, or the first succeeding group of cells in a sequence of cells that refer to other cells.
    let directDependents = range.getDirectDependents();

    range.load("address");
    dependents.areas.load("address");    
    directDependents.areas.load("address");
    
    await context.sync();

    console.log(`All dependent cells of ${range.address}:`);
    
    // Use the dependents API to loop through all dependents of the active cell.
    for (let i = 0; i < dependents.areas.items.length; i++) {
      // Highlight and print out the addresses of all dependent cells.
      dependents.areas.items[i].format.fill.color = "Orange";
      console.log(`  ${dependents.areas.items[i].address}`);
    }

    console.log(`Direct dependent cells of ${range.address}:`);

    // Use the direct dependents API to loop through direct dependents of the active cell.
    for (let i = 0; i < directDependents.areas.items.length; i++) {
      // Highlight and print the address of each dependent cell.
      directDependents.areas.items[i].format.fill.color = "Yellow";
      console.log(`  ${directDependents.areas.items[i].address}`);
    }
});

関連項目