プロが教える店舗&オフィスのセキュリティ対策術

引数名の関数を実行したいのですが、どうすればいいでしょうか?

【やりたいイメージ】

Function 関数選択(関数)
関数選択 = 関数() ← 引数の関数が"z"の場合、"Function z()"を呼びたい
End Function


--------------------
呼び出す関数
--------------------
Function a()
a = "a"
End Function



Function z()
z = "z"
End Function

--------------------------

"Function 関数選択(関数)"の中で、ifやswich すればできると思うのですが、ずらずら書くのもうっとおしいのでスマートにしたいと思っています。
call がいいと思ったのですが、戻り値がかえせません。
何かいい方法はないでしょうか?

よろしくお願いします。

A 回答 (5件)

No2 です。



>関数選択 = Eval(関数 & "()")
>
> を、関数選択 = Eval(関数 & "(" & 引数 & ")")

引数のデータ型が数値なら、これで OKです。

テキスト型なら

Public Function 関数選択(関数 As String, 引数 As Variant) As Variant
  関数選択 = Eval(関数 & "('" & 引数 & "')")
End Function

返値の型とか、引数に NULL値が存在するかなど
はっきりしない部分があるので
ザックリとした回答になりますが。
    • good
    • 0
この回答へのお礼

シンプルでわかりやすい回答をありがとうございます。

関数選択 = Eval(関数 & "('" & 引数 & "')")

"('" & 引数 & "')")
のところの「’」ですが、
何で、ここに登場するの?
って疑問が浮かびましたが、試してみるとうまくいきました。

とりあえず
「世の中の仕組みは、こんなものだ~」
と納得しています。
ありがとうございました。

お礼日時:2012/05/06 19:41

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
  
ご確認ください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

>注)VBの場合文字列に"を付ける場合は"を2つ続ける必要があります。
実は、追加の質問をした後に、いろいろと試してみました。
ダブルクォーテーションを増やしたり減らしたりと・・・
しかし、まさか3つも続けるとは思いませんでした。
いろいろと試した結果、引き数はあきらめ、引き数の値を返す関数をつくり、
その名前を入れると、とりあえずやりたいことが出来ました。
でも、改めてこのやり方で試してみたいと思います。
ありがとうございました。

お礼日時:2012/05/06 19:38

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
  
ご確認ください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これで解決!
と思ったのですが、呼び出す関数に引数が必要となりました。
>関数選択 = Eval(関数 & "()")

を、関数選択 = Eval(関数 & "(" & 引数 & ")")
とかやっているのですが、うまくいきません。
引数のある関数は無理なのでしょうか?

お礼日時:2012/05/05 15:28

Access の場合は 「EVal 関数」 になります。



Eval 関数
http://office.microsoft.com/ja-jp/access-help/HA …
    • good
    • 0
この回答へのお礼

ありがとうございます。
Eval 関数でいいみたいですが、さらに続きがあります。
その呼び出す関数に、引数があります。
引数がある場合が、うまくいきません。
どうすればいいのでしょうか?

お礼日時:2012/05/05 15:25

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

ありがとうございます。
とてもかわいい猫ですね~
猫好きの私としてはたまりません。
おっと、猫ではなくEvaluateですが、
subまたはfunctionが定義されていません。
ってでました。
何かライブラリの読み込みが必要なのでしょうか?

お礼日時:2012/05/05 10:46

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