2017-02-17 6 views
2

BESSELK関数をパラメータとして持つ関数を作成しようとしています。私はfordom.free.fr上でこのコードが見つかりました:besselk関数を統合する関数

Option Explicit 

Function F(ByVal Equation As String, Optional ByVal X As Variant = 0) As Double 
'Evaluates f(x) at position x 

'Uppercase 
Equation = UCase(Equation) 
With WorksheetFunction 
'avoid mixing up EXP with exp and X 
Equation = .Substitute(Equation, "EXP", "exp") 
'set value X instead of letter X 
Equation = .Substitute(Equation, "X", X) 
'converts comas into points 
Equation = .Substitute(Equation, ",", ".") 
'Changes)(with)*(
Equation = .Substitute(Equation, ")(", ")*(") 
End With 

'calculates expression 
F = Evaluate(Equation) 

End Function 

をさらに考慮に入れる2つのパラメータにそれを修正:

Option Explicit 

Function F(ByVal Equation As String, Optional ByVal X As Variant = 0, _ 
& **Optional ByVal Y As Variant = 0**) As Double 
'Evaluates f(x) at position x 

'Uppercase 
Equation = UCase(Equation) 
With WorksheetFunction 
'avoid mixing up EXP with exp and X 
Equation = .Substitute(Equation, "EXP", "exp") 
'set value X instead of letter X 
Equation = .Substitute(Equation, "X", X) 
**'set value Y instead of letter Y 
Equation = .Substitute(Equation, "Y", Y)** 
'converts comas into points 
Equation = .Substitute(Equation, ",", ".") 
'Changes)(with)*(
Equation = .Substitute(Equation, ")(", ")*(") 
End With 

'calculates expression 
F = Evaluate(Equation) 

End Function 

私はFをしようとすると( "X + Y"; 5; 2) 、7を返します。これは問題ありません。しかし、私が F( "BESSELK(x; y)"; 5; 1)を試しても、#VALUEエラーが出る

Bessel関数のドキュメントと変数の型または2つの引数をチェックしました。確かに "バリアント"です。

なぜここで間違っているのか分かりません!私も簡単な関数F( "POWER(x; y)"; 5; 2)で試しましたが、#VALUEエラーも出ます。

どのようなヘルプも歓迎です!どうもありがとうございました。

答えて

0

これらの線

Equation = .Substitute(Equation, "EXP", "exp")

Equation = .Substitute(Equation, "Y", Y)

のアイデアは、仮パラメータXY式内部大文字に書き込まなければならないということです。

=F("BESSELK(X;Y)";5;1) ' <-- Capital X, capital Y 
=F("POWER(x;y)";5;2) ' <-- idem 

このUDFは、使用するロケール設定でのみ機能することに注意してください。

+0

ありがとうございます。私は大文字でBESSELK関数内の変数を設定しようとしましたが、何も変わらず、#VALUEエラーがあります。パラメータXとYがBESSELK関数にリンクされていないように感じます。 – MaximeS

+0

私のロケールのために変更した後で、あなたのコードは私のために働いていませんでした( 'Equation = .Substitute(Equation、"、 "、"。 ")'行を削除し、式にセミコロンの代わりにコンマを使用しました)。 BESSELKも同様に機能するはずです。あなたのロケール設定は何ですか? –

+0

'= F(" POWER(x; y) "; 5; 2)'を試しましたか? –

関連する問題