Excel でカスタム関数でデータ型を使用する

Excel データ型を使用すると、カスタム関数は文字列、数値、ブール値、エラー以外の値を受け入れて返します。 たとえば、カスタム関数は、書式設定された数値を返したり、エンティティ値を引数として受け入れたりできます。

カスタム関数と Excel JavaScript API では、データ型に同じ JSON スキーマが使用されます。 有効にすると、カスタム関数が値を計算して評価するにつれて、そのスキーマが維持されます。

データ型を使用してカスタム関数を試す

Script Labを Excel にインストールし、サンプル ライブラリからデータ型: カスタム関数のサンプルを実行します。

カスタム関数がデータ型を処理する方法

カスタム関数は、データ型をパラメーターとして受け入れ、戻り値としてデータ型を作成できます。 使用可能な型の概要については、「 Excel アドインのデータ型の概要」を参照してください。

注:

カスタム関数は、データ型によって提供される拡張エラー オブジェクトの完全な機能をサポートしていません。 カスタム関数は、データ型のエラー オブジェクトを受け入れることはできますが、計算全体でエラーは維持されません。 現時点では、カスタム関数は CustomFunctions.Error オブジェクトに含まれるエラーのみをサポートしています。

カスタム関数のデータ型を有効にする

カスタム関数プロジェクトには JSON メタデータ ファイルが含まれています。これは、データ型 API で使用される JSON スキーマとは異なります。 カスタム関数のデータ型を有効にするには、カスタム関数メタデータ ファイルに allowCustomDataForDataTypeAny プロパティを手動で追加し、 trueに設定します。

"allowCustomDataForDataTypeAny": true

手動の JSON メタデータ作成プロセスの詳細については、「 カスタム関数の JSON メタデータを手動で作成する」を参照してください。 このプロパティの追加の詳細については、allowCustomDataForDataTypeAny を参照してください。

書式設定された数値を出力する

次のカスタム関数は、数値と数値の形式を受け取り、書式設定された DoubleCellValue オブジェクトを 返します。

/**
 * Take a number as the input value and return a double as the output.
 * @customfunction
 * @param {number} value
 * @param {string} format (e.g. "0.00%")
 * @returns A formatted number value.
 */
function createFormattedNumber(value, format) {
    return {
        type: "Double",
        basicValue: value,
        numberFormat: format
    };
}

エンティティ値の入力

次のカスタム関数は 、EntityCellValue オブジェクトと属性名を受け入れます。 attributetextされると、エンティティの text プロパティが返されます。 それ以外の場合は、要求されたプロパティの basicValue を返します。

重要

カスタム関数で EntityCellValue を構築または返し、その値に入れ子になったエンティティが含まれている場合は、ルート レベルのエンティティで referencedValues 配列のみを定義します。 入れ子になったエンティティにreferencedValuesを定義すると、Excel は javaScript 例外や詳細な診断なしで #VALUE! エラーを返します。 入れ子になったエンティティの ReferenceCellValue インデックスを使用して、代わりにルート エンティティの referencedValues 配列を指します。 詳細については、「 エンティティ値」を参照してください。

/**
 * Accept an entity value data type as a function input.
 * @customfunction
 * @param {Excel.EntityCellValue} value
 * @param {string} attribute
 * @returns {any} The text value of the entity.
 */
function getEntityAttribute(value, attribute) {
    if (value.type === "Entity") {
        if (attribute === "text") {
            return value.text;
        } else {
            return value.properties[attribute].basicValue;
        }
    } else {
        return JSON.stringify(value);
    }
}

関連項目