2016-10-28 7 views
0

私は、サブルーチンを呼び出すための乱数型を返す、一連のVBA関数をExcelで書くことを試みています。より複雑な数式に入ると、同様のエラーが発生します。例えば、非対称三角ランダム変数。ここでVBAに三角形の乱数を返す関数を書く

は、関数である:私は受け付けており

Function AsymetricTriangleInVBA (min As Double, mode As Double, max As Double) As Double 
    Application.Volatile 
    Randomize 
    Dim Temp As Variant 
    Temp = Rnd 
    AsymetricTriangleInVBA = WorksheetFunction.if(Temp < ((mode - min)/(max - min)), min + (max - min) * WorksheetFunction.sqrt(((mode - min)/(max - min)) * Temp), min + (max - min) * (1 - WorksheetFunction.sqrt((1 - ((mode - min)/(max - min))) * (1 - Temp)))) 
End Function 

'my test sub 

Sub test() 
    MsgBox AsymetricTriangleInVBA(5, 10, 15) 
End Sub 

一貫性のエラーは、次のとおりです。

ファイル名を指定して実行時エラー '438': オブジェクトはこのプロパティまたはメソッド

をサポートしていません。

このエラーは何を意味し、どのように修正できますか?

+0

あなたがする必要があります何のWorksheetFunction.IFはありませんifのvba形式を使用します。 –

+0

'WorksheetFunction.if'を' IIF'に置き換えてみてください – Slai

+0

Slim-iifが機能しませんでした。同じエラー –

答えて

2

同等、この場合には、VBA自体...に私はそれを動作させることができると思ったSQR

2通り利用可能である時はいつでも、私は通常WorksheetFunctionを使用していない...

1)

Function AsymetricTriangleInVBA(min As Double, mode As Double, max As Double) As Double 
    Application.Volatile 
    Dim intCondition As Integer 
    Randomize 
    Dim Temp As Variant 
    Temp = Rnd 
    intCondition = CInt(Temp < ((mode - min)/(max - min))) * -1 
    AsymetricTriangleInVBA = intCondition * (min + (max - min) * Sqr(((mode - min)/(max - min)) * Temp)) + (1 - intCondition) * (min + (max - min) * (1 - Sqr((1 - ((mode - min)/(max - min))) * (1 - Temp)))) 
End Function 

2)

Function AsymetricTriangleInVBA(min As Double, mode As Double, max As Double) As Double 
    Application.Volatile 

    Randomize 
    Dim Temp As Variant 
    Temp = Rnd 

    If Temp < ((mode - min)/(max - min)) Then 
     AsymetricTriangleInVBA = (min + (max - min) * Sqr(((mode - min)/(max - min)) * Temp)) 
    Else 
     AsymetricTriangleInVBA = (min + (max - min) * (1 - Sqr((1 - ((mode - min)/(max - min))) * (1 - Temp)))) 
    End If 


End Function 
関連する問題