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.SpecialCellTypeExcel.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();
});

関連項目