Excel 数式は、多くの場合、他のセルを参照します。 これらの入力セルは、数式の "優先順位" です。 他のセルに依存する数式セルは、それらのセルの "依存" です。 関連する Excel UI 機能の詳細については、「 数式とセル間のリレーションシップを表示する」を参照してください。
前例と依存のチェーンが形成される可能性があります。 前例自体に優先順位を付けることができます。 同じ考え方が依存者にも当てはまります。 "直接の優先順位" または "直接依存" は、数式が指すセル、または数式を直接指すセルの最初のレベルのみです。
この記事では、Excel JavaScript API を使用して数式の優先順位と依存を取得するコード サンプルを提供します。
Range オブジェクトがサポートするプロパティとメソッドの完全な一覧については、「Range Object (JavaScript API for Excel)」を参照してください。
重要な点
-
getPrecedentsまたはgetDependentsを使用して、関連するすべてのセルを取得します。getDirectPrecedentsまたはgetDirectDependentsを使用して、最初のレベルのみを取得します。 - どちらの API でも、
WorkbookRangeAreasオブジェクトが返されます。 ワークシートごとにアドレスをグループ化します。 個々のRangeオブジェクトの各areas.items一覧を確認します。 - 何千ものセルなど、非常に大きなセットが遅くなる可能性があります。 直接メソッドから始めるか、最初に選択範囲を絞り込みます。
- これらの API はブックの境界を越えていません。
- 関連するセルがない場合は、
ItemNotFoundエラーがスローされます。 それをキャッチし、フレンドリーなメッセージを表示します。 - セルを強調表示する場合は、書式設定をクリアする方法をユーザーに提供します。
数式の前例を取得する
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 メソッドは矢印を描画しません。
重要
getPrecedents メソッドと getDirectPrecedents メソッドは、ブック間で優先順位の高いセルを取得しません。
次のコード サンプルは、 Range.getPrecedents メソッドと Range.getDirectPrecedents メソッドを操作する方法を示しています。 このサンプルでは、アクティブな範囲の優先順位を取得し、それらの前例セルの背景色を変更します。 直接の前例セルの背景色は黄色に設定され、他の前例セルの背景色はオレンジに設定されます。
// 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.getPrecedents メソッドと Range.getDirectPrecedents メソッドは、前例のセルが見つからない場合にItemNotFound エラーを返します。 これをキャッチし、わかりやすいメッセージを提供します。
数式の依存を取得する
Range.getDependents を使用して、数式の依存セルを見つけます。
Range.getPrecedentsと同様に、Range.getDependentsも WorkbookRangeAreas オブジェクトを返します。 このオブジェクトには、ブック内のすべての依存オブジェクトのアドレスが含まれています。 これには、少なくとも 1 つの式依存を含むワークシートごとに個別の RangeAreas オブジェクトがあります。
RangeAreas オブジェクトの操作の詳細については、「Excel アドインで複数の範囲を同時に操作する」を参照してください。
数式の直接依存セルのみを検索するには、 Range.getDirectDependents を使用します。
Range.getDirectDependents は Range.getDependents と同様に機能し、直接依存のアドレスを含む WorkbookRangeAreas オブジェクトを返します。
次のスクリーンショットは、Excel UI で [ トレース依存 ] ボタンを選択した結果を示しています。 このボタンは、選択したセルから依存セルへの矢印を描画します。 選択したセル D3 は、従属セルとして セル E3 を持っています。
E3 には、"=C3 * D3" という数式が含まれています。 Excel UI ボタンとは異なり、 getDependents メソッドと getDirectDependents メソッドは矢印を描画しません。
重要
getDependents メソッドと getDirectDependents メソッドは、ブック間で依存セルを取得しません。
次のコード サンプルは、 Range.getDependents メソッドと Range.getDirectDependents メソッドを操作する方法を示しています。 このサンプルでは、アクティブな範囲の依存を取得し、それらの依存セルの背景色を変更します。 直接依存セルの背景色は黄色に設定され、他の従属セルの背景色はオレンジ色に設定されます。
// 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}`);
}
});
注:
Range.getDependents メソッドと Range.getDirectDependents メソッドは、依存するセルが見つからない場合にItemNotFound エラーを返します。 これをキャッチし、わかりやすいメッセージを提供します。
関連項目
Office Add-ins