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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示