Function 関数選択(関数)内で、条件分岐を使って引数に応じた関数を呼び出す方法を教えてください。
戻り値を持つ関数を呼び出すために、引数に対応する関数を呼び出す方法を知りたいです。
access vbaで引数によって、関数を変えたい
引数名の関数を実行したいのですが、どうすればいいでしょうか?
【やりたいイメージ】
Function 関数選択(関数)
関数選択 = 関数() ← 引数の関数が"z"の場合、"Function z()"を呼びたい
End Function
--------------------
呼び出す関数
--------------------
Function a()
a = "a"
End Function
~
Function z()
z = "z"
End Function
--------------------------
"Function 関数選択(関数)"の中で、ifやswich すればできると思うのですが、ずらずら書くのもうっとおしいのでスマートにしたいと思っています。
call がいいと思ったのですが、戻り値がかえせません。
何かいい方法はないでしょうか?
よろしくお願いします。
a-z_A-Zさん
引数が文字なのか数値なのか分かりませんが、Variant(無指定)の場合で
説明いたします。
・引数が数値の場合はそのまま値を渡せば良いです。
答え= 関数選択("z",100)
・引数が文字のの場合は"を付けて渡す必要があります。
注)VBの場合文字列に"を付ける場合は"を2つ続ける必要があります。
答え= 関数選択("a","""X""")
もし"を付けないで引数を渡した場合は
答え= 関数選択("a","X")
↓
答え= A(X)と同様な関数
なので変数Xの指定がないのでエラーになるかと思います。
Function 関数選択(関数 As String, 引数)
関数選択 = Eval(関数 & "(" & 引数 & ")")
End Function
Function a(引数)
a = "a" & 引数
End Function
Function z(引数)
z = "z" & 引数
End Function
ご確認ください。
NO1です、
すみません、AccessとEXCELのマクロ(VBA)関数は同じだと思っていました。
AccessはEvaluateではなくEvalのようです。
よって次のようになります。
答え = Eval("a()")
答え = Eval("z()")
または
答え=関数選択("a")
答え=関数選択("Z")
Function 関数選択(関数 as String)
関数選択 = Eval(関数 & "()")
End Function
Function a()
a = "a"
End Function
Function z()
z = "z"
End Function
ご確認ください。
a-z_A-Zさん
はじめまして。
Evaluateを使用すればできるかと思います。
答え = Evaluate("a()")
答え = Evaluate("z()")
または
答え=関数選択("a")
答え=関数選択("b")
Function 関数選択(関数 as String)
関数選択 = Evaluate(関数 & "()")
End Function
Function a()
a = "a"
End Function
Function z()
z = "z"
End Function
お礼
シンプルでわかりやすい回答をありがとうございます。 関数選択 = Eval(関数 & "('" & 引数 & "')") の "('" & 引数 & "')") のところの「’」ですが、 何で、ここに登場するの? って疑問が浮かびましたが、試してみるとうまくいきました。 とりあえず 「世の中の仕組みは、こんなものだ~」 と納得しています。 ありがとうございました。