SPREAD for WPF 4.0J - GcSpreadGrid
カスタム関数
MESCIUS SPREAD for WPF 4.0J > 開発者ガイド > 数式 > カスタム関数

製品では 448 種類の組み込み関数を提供しています。しかし、必要な計算や処理がこれらの組込み関数に存在しない場合、カスタム関数を作成できます。カスタム関数は、組込み関数と同様に使用できます。カスタム関数は次の手順で作成します。

参照設定の確認

プロジェクトの参照設定に GrapeCity.Wpf.CalcEngine.dll が追加されている必要があります。製品が提供するアセンブリについては「アセンブリ」を参照してください。

カスタム関数の作成

CalcFunction クラスを継承するクラスを作成し Evaluate メソッドをオーバーライドします。Evaluate メソッドに、カスタム関数の処理を実装します。また、MaxArgs および MinArgs プロパティをオーバーライドし、カスタム関数が受け取る引数の最大数、および最小数を設定します。これにより、設定を超える、または設定に満たない数の引数で関数が呼び出された場合、セルに「#VALUE!」エラーが表示されます。

次のサンプルコードは、2つの引数を受け取り積算するカスタム関数 KAKERU を作成します。

サンプルコード
C#
コードのコピー
public class MyKakeruFunction : GrapeCity.CalcEngine.Functions.CalcFunction
{
    //関数の処理
    public override object Evaluate(object[] args)
    {
        double x = double.Parse(args[0].ToString());
        double y = double.Parse(args[1].ToString());
        return x * y;
    }
    //引数の最大数
    public override int MaxArgs
    {
        get { return 2; }
    }
    //引数の最小数
    public override int MinArgs
    {
        get { return 2; }
    }
    //関数の名称
    public override string Name
    {
        get { return "KAKERU"; }
    }
}
Visual Basic
コードのコピー
Public Class MyKakeruFunction
    Inherits GrapeCity.CalcEngine.Functions.CalcFunction
    '関数の処理
    Public Overrides Function Evaluate(args As Object()) As Object
        Dim x As Double = Double.Parse(args(0).ToString())
        Dim y As Double = Double.Parse(args(1).ToString())
        Return x * y
    End Function
    '引数の最大個数
    Public Overrides ReadOnly Property MaxArgs() As Integer
        Get
            Return 2
        End Get
    End Property
    '引数の最小個数
    Public Overrides ReadOnly Property MinArgs() As Integer
        Get
            Return 2
        End Get
    End Property
    '関数の名称
    Public Overrides ReadOnly Property Name() As String
        Get
            Return "KAKERU"
        End Get
    End Property
End Class
組込み関数の名称は予約されています。カスタム関数に、組込み関数と同じ名前は使用できません。製品が提供する組込み関数について、詳しくは「関数リファレンス」を参照してください。

カスタム関数のコントロールへの登録

コントロールの AddCustomFunction メソッドで、作成したカスタム関数をコントロールに登録します。次のサンプルコードは、上のサンプルコードで作成した KAKERU 関数を登録します。

サンプルコード
C#
コードのコピー
gcSpreadGrid1.AddCustomFunction(new MyKakeruFunction());
Visual Basic
コードのコピー
GcSpreadGrid1.AddCustomFunction(New MyKakeruFunction())

カスタム関数の使用

カスタム関数は、組み込み関数と同様に使用できます。次のサンプルコードは、上のサンプルコードで作成して登録した KAKERU 関数をコードから使用します。

サンプルコード
C#
コードのコピー
gcSpreadGrid1[0, 0].Formula = "KAKERU(1000,1.05)";
gcSpreadGrid1[0, 1].Value = 3;
gcSpreadGrid1[1, 0].Formula = "KAKERU(A1,B1)";
Visual Basic
コードのコピー
GcSpreadGrid1(0, 0).Formula = "KAKERU(1000,1.05)"
GcSpreadGrid1(0, 1).Value = 3
GcSpreadGrid1(1, 0).Formula = "KAKERU(A1,B1)"

また、ユーザーによる数式の編集が許可されていれば、組込み関数と同様に、ユーザーがカスタム関数を使用することもできます。ユーザーによる数式の編集を許可する方法については、「ユーザーによる数式の編集を許可」を参照してください。

ユーザーによるカスタム関数の使用

Excel ファイルへの出力

Excel ファイルへの出力では、セルに設定されたカスタム関数は出力されますが、カスタム関数の定義は出力されません。そのため、カスタム関数が設定されたセルは「#NAME?」エラーとなります。「#NAME?」エラーを解決するには、出力された Excel ファイルを開き、カスタム関数と同じ名前のユーザー定義関数を作成する必要があります。

関連トピック