カスタム関数から Excel JavaScript API を呼び出す

計算にパラメーターとして渡されないブック データが必要な場合は、カスタム関数から Excel JavaScript API を呼び出します。 たとえば、カスタム関数は、ドキュメントのプロパティ、範囲の値または形式、カスタム XML パーツ、またはブック名を読み取ることができます。

これらの呼び出しは読み取り専用のままにします。 他のセルまたは Excel 環境を変更するカスタム関数は、パフォーマンスの低下、タイムアウト、または無限の計算ループを引き起こす可能性があります。

開始する前に

カスタム関数が Excel JavaScript API を呼び出す前に、アドインで 共有ランタイム を使用する必要があります。 Microsoft 365 Agents Toolkit を使用して Excel カスタム関数プロジェクトを作成するか、共有ランタイムを使用するように既存のアドインを構成します

ブックから値を取得する

ブックにアクセスする Excel.RequestContext オブジェクトを作成します。 関数に必要なプロパティを読み込み、 context.sync() を呼び出して結果を返します。

次のカスタム関数は、 Worksheet.getRange を使用してセル値を読み取ります。 address パラメーターは文字列でなければなりません。 たとえば、セルに「 =CONTOSO.GETRANGEVALUE("A1") 」と入力すると、セル A1 から値が返されます。

/**
 * @customfunction
 * @param {string} address The address of the cell from which to retrieve the value.
 * @returns The value of the cell at the input address.
 **/
async function getRangeValue(address) {
    // Retrieve the context object.
    const context = new Excel.RequestContext();

    // Use the context object to access the cell at the input address.
    const range = context.workbook.worksheets.getActiveWorksheet().getRange(address);
    range.load("values");
    await context.sync();

    // Return the value of the cell at the input address.
    return range.values[0][0];
}

カスタム関数を使用した Excel JavaScript API の呼び出しの制限事項

カスタム関数アドインは Excel JavaScript API を呼び出すことができますが、呼び出す API には注意が必要です。 カスタム関数を実行しているセルの外側のセルを変更するカスタム関数から Excel JavaScript API を呼び出さないでください。 他のセルまたは Excel 環境を変更すると、Excel アプリケーションでパフォーマンスの低下、タイムアウト、無限ループが発生する可能性があります。 つまり、カスタム関数では次の操作を行ってはなりません。

  • スプレッドシートのセルを挿入、削除、書式設定します。
  • 別のセルの値を変更する。
  • シートを移動、名前変更、削除、またはブックに追加します。
  • ブックに名前を追加します。
  • プロパティを設定します。
  • 計算モードや画面ビューなど、Excel の環境オプションを変更します。

カスタム関数アドインは、カスタム関数を実行しているセルの外側のセルから情報を読み取ることができますが、他のセルへの書き込み操作を実行しないでください。 代わりに、リボン ボタンまたは作業ウィンドウのコンテキストから他のセルや Excel 環境に変更を加えます。 また、このシナリオでは予期しない結果が生じるため、Excel の再計算が行われている間はカスタム関数の計算を実行しないでください。

次の手順

関連項目