2017-02-17 67 views
2

我想創建一個函數,具有BESSELK函數作爲參數。我發現fordom.free.fr此代碼:函數集成貝塞爾函數

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錯誤

我的文檔中檢查和變量類型或從貝塞爾函數的兩個參數確實是「Variante」。

我真的不明白爲什麼這裏出錯了!我也嘗試了一個更簡單的函數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)'? –