- ベストアンサー
VBで、関数を関数の引数にするは?
VBで関数の引数に、関数を呼ぶにはどのようにすればいいでしょうか? 例えば以下のようなイメージです DEF FUNC1(X)=X^2 DEF FUNC2(F,a,b)=F(a)+F(b) 関数FUNC2では、関数Fを引数にする つまりFUNC2(FUNC1,1,2)は FUNC1(1)+FUNC1(2)=1^2+2^2=5 こんな感じです。 お教えください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じですかね? フォームにコマンドボタンを1つ貼り付けてあります。 で、ボタンを押すと関数の結果をメッセージボックスに表示するようになっています。 CallByNameの詳しい使い方はヘルプを見てください。 Private Sub Command1_Click() MsgBox Func2("Func1", 1, 2) End Sub Public Function Func1(X As Long) As Long Func1 = X ^ 2 End Function Public Function Func2(strFuncName As String, X As Long, Y As Long) As Long Func2 = CallByName(Me, strFuncName, VbMethod, X) _ + CallByName(Me, strFuncName, VbMethod, Y) End Function
その他の回答 (3)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
VB6、VBA6で、フォームなどのクラスのメソッドやプロパティであるという条件に限り、CallByName()で実現可能かと思われます。
補足
回答ありがとうございます。 できましたら具体的な記述の方法を お教えください。
- ARC
- ベストアンサー率46% (643/1383)
ゴメンナサイ。 ×dblRet = Func2(Func1(1), Func2(2)) ○dblRet = Func2(Func1(1), Func1(2)) でした~
- ARC
- ベストアンサー率46% (643/1383)
こんな感じです。 Function Func1(X As Double) As Double Func1 = X ^2 End Function Function Func2(A As Double, B As Double) As Double Func2 = A + B End Function ----------------------------------------- Sub Test() Dim dblRet As Double '戻り値 dblRet = Func2(Func1(1), Func2(2)) MsgBox "答えは" & dblRet & "で~す!" End Sub
補足
回答ありがとうございます。 しかし、この方式ではFUNC2に引数に 関数ではなくて、FUNC1(1)などの 値をしています。そうではなくて あくまでもFUNC2に関数を渡したい のですが。ここではFUNC1を例に していますが、ここに入るのは SINでもLOGでもいい様にしたいのです。 分かってもらえたでしょうか? もし、「引数に関数を持ってくる」 方法が分かりましたらお教えください。
お礼
大変よく分かりました。ありがとうございました。