dポイントプレゼントキャンペーン実施中!

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
こんな感じです。
お教えください。

A 回答 (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
    • good
    • 0
この回答へのお礼

大変よく分かりました。ありがとうございました。

お礼日時:2002/09/05 22:37

VB6、VBA6で、フォームなどのクラスのメソッドやプロパティであるという条件に限り、CallByName()で実現可能かと思われます。

この回答への補足

回答ありがとうございます。
できましたら具体的な記述の方法を
お教えください。

補足日時:2002/09/03 22:59
    • good
    • 0

ゴメンナサイ。



×dblRet = Func2(Func1(1), Func2(2))

○dblRet = Func2(Func1(1), Func1(2))

でした~
    • good
    • 0

こんな感じです。



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でもいい様にしたいのです。
分かってもらえたでしょうか?
もし、「引数に関数を持ってくる」
方法が分かりましたらお教えください。

補足日時:2002/09/03 22:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!