カスタム関数を作成してテストするとき、製品でエラーが発生する可能性があります。
問題を解決するには、 ランタイム ログを有効にしてエラーをキャプチャ し、 Excel エラー メッセージを参照します。 また、promise を未解決のままにしておくなど、よくある間違いがないか確認します。
カスタム関数のデバッグ
共有ランタイムを使用するカスタム関数アドインをデバッグするには、「Office アドインのデバッグの概要」を参照してください。
共有ランタイムを使用しないカスタム関数アドインをデバッグするには、「 カスタム関数のデバッグ」を参照してください。
ランタイム ログを有効にする
Windows 上の Office でアドインをテストする場合は、ランタイム ログを有効にする必要があります。 ランタイム ログでは、問題解明用に別に作成したログ ファイルに console.log ステートメントが配信されます。 ステートメントには、アドインのマニフェスト ファイル、ランタイム条件、カスタム関数のインストールに関連するエラーなど、さまざまなエラーが含まれます。 ランタイム ログの詳細については、「ランタイム ログを使用してアドインをデバッグする」を参照してください。
Excel のエラー メッセージを確認する
Excel には多くの組み込みエラー メッセージがあり、計算エラーが発生するとセルに返されます。 カスタム関数では、#NULL!、#DIV/0!、#VALUE!、#REF!、#NAME?、#NUM!、#N/A、#BUSY! の各エラー メッセージのみが使用されます。
通常、これらのエラーは、あなたがExcelで既によく見たことがあるかもしれないエラーと対応関係があります。 次に示すのは、カスタム関数に固有の例外がいくつかあります。
-
#NAME?エラーは通常、関数の登録に問題があることを意味します。 詳細については、「 #NAME? エラーを示すカスタム関数」を参照してください。 -
#N/Aエラーは、登録されている間にその機能を実行できなかったということを示す可能性もあります。 この多くは、CustomFunctions.associateコマンドが欠落していることが原因です。 -
#VALUE!エラーは通常、関数のスクリプトファイル内のエラーを示します。 -
#REF!エラーは、関数名がアドイン内に既に存在するの関数名と同じであることを示している可能性があります。
Office のキャッシュをクリアする
カスタム関数に関する情報はOfficeによってキャッシュされます。 開発中、またカスタム関数を使用して繰り返しリロードしている間は、変更が反映されないことがあります。 Officeのキャッシュをクリアすることでこれを修正できます。 詳細については、「Office のキャッシュをクリアする」を参照してください。
アドインの実行時にカスタム関数キャッシュをクリアする
アドインの更新とカスタム関数設定の変更が同時に組み込まれるように、エンド ユーザーに展開されたアドインのカスタム関数キャッシュをクリアする必要がある場合があります。 カスタム関数のキャッシュクリアをトリガーしないと、 functions.json ファイルと functions.js ファイルの変更がエンド ユーザーに到達するまでに最大 24 時間かかることがありますが、 エンド ユーザーに到達taskpane.html への変更はより迅速に行われます。
注:
ドキュメントに対してこの設定を有効にすると、次回アドインでドキュメントが開かれると有効になります。 関数が呼び出された直後には適用されません。
カスタム関数キャッシュがアドインによって確実にクリアされるようにするには、functions.jsファイルに次のコードを追加し、Office.onReady呼び出しまたはその他のアドイン初期化ロジックで setForceRefreshOn メソッドを呼び出します。
重要
カスタム関数キャッシュをクリアするためのこのプロセスは、 共有ランタイムを使用するカスタム関数アドインでのみサポートされます。
// To enable custom functions cache clearing, add this method to your functions.js
// file, and then call the `setForceRefreshOn` method in your `Office.onReady` call.
function setForceRefreshOn() {
Office.context.document.settings.set(
'Office.ForceRefreshCustomFunctionsCache',
true
);
Office.context.document.settings.saveAsync();
}
ヒント
カスタム関数キャッシュを頻繁に更新するとパフォーマンスに影響を与える可能性があるため、 setForceRefreshOn を使用してカスタム関数キャッシュをクリアする場合は、アドインの開発中にのみ使用するか、バグを解決する必要があります。 カスタム関数アドインが安定したら、キャッシュの更新の強制を停止します。
アドインでカスタム関数キャッシュクリアを無効にするには、 Office.ForceRefreshCustomFunctionsCache を false に設定し、 Office.onReady 呼び出しで メソッドを呼び出します。 次のコード サンプルは、 setForceRefreshOff メソッドの例を示しています。
// To disable custom functions cache clearing, add this method to your functions.js
// file, and then call the `setForceRefreshOff` method in your `Office.onReady` call.
function setForceRefreshOff() {
Office.context.document.settings.set(
'Office.ForceRefreshCustomFunctionsCache',
false
);
Office.context.document.settings.saveAsync();
}
一般的な問題と解決策
#NAME を示すカスタム関数エラー
カスタム関数アドインを使用するブックを開くと、数式の結果ではなくカスタム関数セルに #NAME? エラーが表示されることがあります。 新しい数式を作成するときに、カスタム関数の IntelliSense がブックに表示されない場合もあります。 この問題の原因として考えられるのは、カスタム関数アドインが正常に登録されていないことです。
この問題を解決するには、次の方法を試してください。
- アドイン アイコンを選択して、アドインを更新します。 [ ホーム>アドイン>マイ アドイン ] を選択し、アドイン アイコンを選択します。
- ガイダンスに従って、 Office が開いたときに Office キャッシュを自動的にクリアし、Excel を再起動します。
localhost からアドインを開くことができない: ローカル ループバック除外を使用する
"localhost からこのアドインを開けない" というエラーが表示された場合は、ローカル ループバックの除外を有効にする必要があります。 方法の詳細については、このMicrosoft サポート記事を参照してください。
Windows 上の Excel でランタイム ログが「TypeError: Network request failed」と報告する
localhost サーバーへの呼び出し中にランタイム ログに「TypeError: Network request failed」というエラーが表示された場合は、ローカル ループバック例外を有効にする必要があります。 方法の詳細については、このMicrosoft サポート記事のオプション 2 を参照してください。
promise の戻り値を確認する
Excel がカスタム関数の完了を待っているとき、セルに #BUSY! が表示されます。 カスタム関数のコードで promise が返されているのに、promise で結果が返されない場合、Excel は #BUSY! を表示し続けます。 すべての promise でセルに結果が正しく返されていることを、関数で確認します。
エラー:開発サーバーはすでにポート3000で実行されています。
npm startを実行しているときに、開発サーバーが既にポート3000(またはアドインが使用しているポート)で実行されているというエラーが表示されることがあります。
npm stopを実行するか、Node.jsウィンドウを閉じることによって、開発サーバーを停止できます。 場合によっては、開発サーバーの実行が停止するまでに数分かかることがあります。
関数が読み込まれない: 関数を関連付ける
JSON が登録されておらず、独自の JSON メタデータを作成した場合、#VALUE! エラーが表示されるか、アドインを読み込めないという通知が表示されます。 これは通常、各カスタム関数を JSON メタデータ ファイルで指定されている id プロパティと関連付ける必要があります。 これは、 CustomFunctions.associate() 関数を使用して行います。 通常、この関数呼び出しは、各関数の後、またはスクリプト ファイルの末尾に行われます。 カスタム関数を関連付けないと、カスタム関数は機能しません。
次の例では、add 関数の後で、関数の名前 add と対応する JSON ID ADD を関連付けています。
/**
* Add two numbers.
* @customfunction
* @param {number} first First number.
* @param {number} second Second number.
* @returns {number} The sum of the two numbers.
*/
function add(first, second) {
return first + second;
}
CustomFunctions.associate("ADD", add);
このプロセスの詳細については、「 関数名を JSON メタデータに関連付ける」を参照してください。
既知の問題
既知の問題は、 Excel Custom Functions GitHub リポジトリで追跡および報告されます。
フィードバックの報告
ここに記載されていない問題が発生している場合は、お知らせください。 問題を報告するには 2 つの方法があります。
Excel on Windows または Mac
Windows または Mac で Excel を使用している場合は、Excel から直接 Office 拡張機能チームにフィードバックを報告できます。 これを行うには、[ファイル]>[フィードバック]>[問題点、改善の報告] の順に選択します。 問題点や改善点の報告では、発生した問題を理解するために必要なログが提供されます。
GitHub で
ドキュメント ページの下部にある "コンテンツ フィードバック" 機能を使用するか、カスタム関数リポジトリに直接新しい問題を記入して、発生した問題をお気軽に送信してください。
次の手順
「XLL ユーザー定義関数と互換性のある、カスタム関数を作成する」で方法を確認してください。
関連項目
Office Add-ins