• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:access vbaで引数によって、関数を変えたい)

access vbaで引数によって、関数を変えたい

このQ&Aのポイント
  • VBAを使用して、引数によって関数を切り替える方法を知りたいです。
  • Function 関数選択(関数)内で、条件分岐を使って引数に応じた関数を呼び出す方法を教えてください。
  • 戻り値を持つ関数を呼び出すために、引数に対応する関数を呼び出す方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.5

No2 です。 >関数選択 = Eval(関数 & "()") > > を、関数選択 = Eval(関数 & "(" & 引数 & ")") 引数のデータ型が数値なら、これで OKです。 テキスト型なら Public Function 関数選択(関数 As String, 引数 As Variant) As Variant   関数選択 = Eval(関数 & "('" & 引数 & "')") End Function 返値の型とか、引数に NULL値が存在するかなど はっきりしない部分があるので ザックリとした回答になりますが。

a-z_A-Z
質問者

お礼

シンプルでわかりやすい回答をありがとうございます。 関数選択 = Eval(関数 & "('" & 引数 & "')") の "('" & 引数 & "')") のところの「’」ですが、 何で、ここに登場するの? って疑問が浮かびましたが、試してみるとうまくいきました。 とりあえず 「世の中の仕組みは、こんなものだ~」 と納得しています。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.4

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    ご確認ください。

a-z_A-Z
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

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
質問者

お礼

ありがとうございます。 これで解決! と思ったのですが、呼び出す関数に引数が必要となりました。 >関数選択 = Eval(関数 & "()") を、関数選択 = Eval(関数 & "(" & 引数 & ")") とかやっているのですが、うまくいきません。 引数のある関数は無理なのでしょうか?

すると、全ての回答が全文表示されます。
  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.2

Access の場合は 「EVal 関数」 になります。 Eval 関数 http://office.microsoft.com/ja-jp/access-help/HA001228942.aspx

a-z_A-Z
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

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

a-z_A-Z
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A