Excel JavaScript API を使用して範囲内の特殊なセルを検索する
この記事では、Excel JavaScript API を使用して範囲内の特殊なセルを検索するコード サンプルを提供します。
Range
オブジェクトがサポートするプロパティとメソッドの完全な一覧については、「Excel.Range クラス」を参照してください。
特殊なセルを含む範囲を検索する
Range.getSpecialCells メソッドと Range.getSpecialCellsOrNullObject メソッドは、セルの特性とセルの値の種類に基づいて範囲を検索します。 これらのメソッドでは両方とも、RangeAreas
オブジェクトが返されます。 次に示すのは、TypeScript データ型ファイルの、このメソッドのシグネチャです。
getSpecialCells(cellType: Excel.SpecialCellType, cellValueType?: Excel.SpecialCellValueType): Excel.RangeAreas;
getSpecialCellsOrNullObject(cellType: Excel.SpecialCellType, cellValueType?: Excel.SpecialCellValueType): Excel.RangeAreas;
次のコード サンプルでは、 getSpecialCells
メソッドを使用して、数式を含むすべてのセルを検索します。 このコードについては、以下の点に注意してください。
- 検索が必要なシートの部分を制限するために、まず
Worksheet.getUsedRange
を呼び出し、その範囲に関してのみgetSpecialCells
を呼び出します。 -
getSpecialCells
メソッドはRangeAreas
オブジェクトを返すため、数式を含むセルはすべて、連続していないセルであっても、ピンク色になります。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let usedRange = sheet.getUsedRange();
let formulaRanges = usedRange.getSpecialCells(Excel.SpecialCellType.formulas);
formulaRanges.format.fill.color = "pink";
await context.sync();
});
対象の特性を含むセルが範囲内に存在しない場合、getSpecialCells
によって ItemNotFound エラーがスローされます。 この場合、制御のフローが catch
ブロックに移ります (存在する場合)。
catch
ブロックがない場合、エラーは メソッドを停止します。
対象の特性を含むセルが常に存在するはずである場合、そうしたセルが存在しないなら、コードを使ってエラーをスローする必要があるかもしれません。 一致するセルがないということが有効なシナリオでは、コードでこのような可能性があるかどうかを確認し、あれば、エラーをスローせずに適切に処理するようにしておく必要があります。
getSpecialCellsOrNullObject
メソッドと、返された isNullObject
プロパティを使用して、この動作を実現できます。 次のコード サンプルでは、このパターンを使用します。 このコードについては、以下の点に注意してください。
-
getSpecialCellsOrNullObject
メソッドは常にプロキシ オブジェクトを返すので、通常の JavaScript の意味ではnull
されません。 ただし一致するセルが見つからなかった場合、オブジェクトのisNullObject
プロパティはtrue
に設定されます。 -
isNullObject
プロパティをテストする前に、context.sync
を呼び出します。 これは、すべての*OrNullObject
メソッドとプロパティの必要条件です。プロパティを読み取るためには常に、そのプロパティをロードして同期する必要があるためです。 ただし、isNullObject
プロパティを明示的に読み込む必要はありません。 オブジェクトでload
が呼び出されていない場合でも、context.sync
によって自動的に読み込まれます。 詳細については、「 *OrNullObject メソッドとプロパティ」を参照してください。 - このコードをテストするには、最初に数式を含まないセルの範囲を選択してからコードを実行します。 次に、少なくとも 1 つのセルが数式を含む範囲を選択してからコードを再実行します。
await Excel.run(async (context) => {
let range = context.workbook.getSelectedRange();
let formulaRanges = range.getSpecialCellsOrNullObject(Excel.SpecialCellType.formulas);
await context.sync();
if (formulaRanges.isNullObject) {
console.log("No cells have formulas");
}
else {
formulaRanges.format.fill.color = "pink";
}
await context.sync();
});
わかりやすくするために、この記事の他のすべてのコード サンプルでは、getSpecialCellsOrNullObject
ではなく getSpecialCells
メソッドを使用します。
セルの値の型に応じて対象のセルを絞り込む
Range.getSpecialCells()
メソッドと Range.getSpecialCellsOrNullObject()
メソッドでは、対象セルをさらに絞り込むためにオプションとして使用される 2 番目のパラメーターを承諾します。 この 2 番目のパラメーターは、特定の種類の値を含むセルのみを指定するために使用される Excel.SpecialCellValueType
パラメーターです。
注:
Excel.SpecialCellValueType
パラメーターは、Excel.SpecialCellType
が Excel.SpecialCellType.formulas
または Excel.SpecialCellType.constants
の場合にのみ使用できます。
単一のセル値の型のテスト
Excel.SpecialCellValueType
列挙型には、次の 4 つの基本型があります (このセクションで後述する他の値の組み合わせに加えて)。
Excel.SpecialCellValueType.errors
-
Excel.SpecialCellValueType.logical
(ブール型) Excel.SpecialCellValueType.numbers
Excel.SpecialCellValueType.text
次のコード サンプルでは、数値定数である特殊なセルを検索し、それらのセルをピンク色に色付けします。 このコードについては、以下の点に注意してください。
- リテラル数値を持つセルのみが強調表示されます。 数式 (結果が数値であっても) またはブール値、テキスト、またはエラー状態のセルを持つセルは強調表示されません。
- コードをテストするには、リテラル数値を持ついくつかのセル、他の型のリテラル値を持ついくつかのセル、そして数式を持ついくつかのセルをそれぞれワークシートに含めるようにしてください。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let usedRange = sheet.getUsedRange();
let constantNumberRanges = usedRange.getSpecialCells(
Excel.SpecialCellType.constants,
Excel.SpecialCellValueType.numbers);
constantNumberRanges.format.fill.color = "pink";
await context.sync();
});
複数のセル値の型のテスト
テキスト値のセルすべてとブール値 (Excel.SpecialCellValueType.logical
) のセルすべてなど、セル値の型を複数操作する必要がある場合もあります。
Excel.SpecialCellValueType
列挙型には、結合された型の値があります。 たとえば、Excel.SpecialCellValueType.logicalText
は、すべてのブール値のセルとテキスト値のセルを対象としています。
Excel.SpecialCellValueType.all
は既定値であり、返されるセル値の型は制限されません。 次のコード サンプルでは、数値またはブール値を生成する数式を使用して、すべてのセルに色を付けます。
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let usedRange = sheet.getUsedRange();
let formulaLogicalNumberRanges = usedRange.getSpecialCells(
Excel.SpecialCellType.formulas,
Excel.SpecialCellValueType.logicalNumbers);
formulaLogicalNumberRanges.format.fill.color = "pink";
await context.sync();
});
関連項目
Office Add-ins