作成日: 2018/10/23 最終更新日: 2018/10/23
文書種別
制限事項
詳細
カスタム関数をSPREADデザイナで記述すると実行時に#NAME?と表示されます。本現象は、デザイナで記述したカスタム関数をForm1_Loadイベント内で登録した場合にも発生します。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付け、下記サンプルコードを記述します。
■サンプルコード(VB.NET)
2.作成したカスタム関数をSPREADデザイナでセルに設定します。

3.アプリケーションを実行します。
-- カスタム関数はForm1_Loadイベント内で登録されていますが、I列のセルが#NAME?と表示されます。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付け、下記サンプルコードを記述します。
■サンプルコード(VB.NET)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim fs As FarPoint.Win.Spread.Model.ICustomFunctionSupport = DirectCast(FpSpread1.ActiveSheet.Models.Data, FarPoint.Win.Spread.Model.ICustomFunctionSupport)
fs.AddCustomFunction(New MySumFunction())
End Sub
End Class
' FunctionInfoクラスを継承したサブクラスを作成
Public Class MySumFunction
Inherits FarPoint.CalcEngine.FunctionInfo
Public Overrides Function Evaluate(args As Object()) As Object
Dim cr As FarPoint.CalcEngine.CalcReference
Dim total As Double = 0
If TypeOf args(0) Is FarPoint.CalcEngine.CalcReference Then
' 引数args[0]より範囲を取得
cr = DirectCast(args(0), FarPoint.CalcEngine.CalcReference)
For r As Integer = cr.Row To (cr.Row + cr.RowCount) - 1
For c As Integer = cr.Column To (cr.Column + cr.ColumnCount) - 1
' 範囲内の値を加算
total += FarPoint.CalcEngine.CalcConvert.ToDouble(cr.GetValue(r, c))
Next
Next
' 計算結果
Return total
Else
Return FarPoint.CalcEngine.CalcError.Value
End If
End Function
Public Overrides ReadOnly Property MaxArgs() As Integer
Get
Return 1
End Get
End Property
Public Overrides ReadOnly Property MinArgs() As Integer
Get
Return 1
End Get
End Property
Public Overrides ReadOnly Property Name() As String
Get
Return "MySumFunction"
End Get
End Property
Public Overrides Function AcceptsReference(i As Integer) As Boolean
Return True
End Function
End Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim fs As FarPoint.Win.Spread.Model.ICustomFunctionSupport = DirectCast(FpSpread1.ActiveSheet.Models.Data, FarPoint.Win.Spread.Model.ICustomFunctionSupport)
fs.AddCustomFunction(New MySumFunction())
End Sub
End Class
' FunctionInfoクラスを継承したサブクラスを作成
Public Class MySumFunction
Inherits FarPoint.CalcEngine.FunctionInfo
Public Overrides Function Evaluate(args As Object()) As Object
Dim cr As FarPoint.CalcEngine.CalcReference
Dim total As Double = 0
If TypeOf args(0) Is FarPoint.CalcEngine.CalcReference Then
' 引数args[0]より範囲を取得
cr = DirectCast(args(0), FarPoint.CalcEngine.CalcReference)
For r As Integer = cr.Row To (cr.Row + cr.RowCount) - 1
For c As Integer = cr.Column To (cr.Column + cr.ColumnCount) - 1
' 範囲内の値を加算
total += FarPoint.CalcEngine.CalcConvert.ToDouble(cr.GetValue(r, c))
Next
Next
' 計算結果
Return total
Else
Return FarPoint.CalcEngine.CalcError.Value
End If
End Function
Public Overrides ReadOnly Property MaxArgs() As Integer
Get
Return 1
End Get
End Property
Public Overrides ReadOnly Property MinArgs() As Integer
Get
Return 1
End Get
End Property
Public Overrides ReadOnly Property Name() As String
Get
Return "MySumFunction"
End Get
End Property
Public Overrides Function AcceptsReference(i As Integer) As Boolean
Return True
End Function
End Class
2.作成したカスタム関数をSPREADデザイナでセルに設定します。

3.アプリケーションを実行します。
-- カスタム関数はForm1_Loadイベント内で登録されていますが、I列のセルが#NAME?と表示されます。
回避方法
SPREADデザイナではなくコーディングで関数を設定します。
旧文書番号
83322