
引数名の関数を実行したいのですが、どうすればいいでしょうか?
【やりたいイメージ】
Function 関数選択(関数)
関数選択 = 関数() ← 引数の関数が"z"の場合、"Function z()"を呼びたい
End Function
--------------------
呼び出す関数
--------------------
Function a()
a = "a"
End Function
~
Function z()
z = "z"
End Function
--------------------------
"Function 関数選択(関数)"の中で、ifやswich すればできると思うのですが、ずらずら書くのもうっとおしいのでスマートにしたいと思っています。
call がいいと思ったのですが、戻り値がかえせません。
何かいい方法はないでしょうか?
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
No2 です。
>関数選択 = Eval(関数 & "()")
>
> を、関数選択 = Eval(関数 & "(" & 引数 & ")")
引数のデータ型が数値なら、これで OKです。
テキスト型なら
Public Function 関数選択(関数 As String, 引数 As Variant) As Variant
関数選択 = Eval(関数 & "('" & 引数 & "')")
End Function
返値の型とか、引数に NULL値が存在するかなど
はっきりしない部分があるので
ザックリとした回答になりますが。
シンプルでわかりやすい回答をありがとうございます。
関数選択 = Eval(関数 & "('" & 引数 & "')")
の
"('" & 引数 & "')")
のところの「’」ですが、
何で、ここに登場するの?
って疑問が浮かびましたが、試してみるとうまくいきました。
とりあえず
「世の中の仕組みは、こんなものだ~」
と納得しています。
ありがとうございました。
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
ご確認ください。
ありがとうございます。
>注)VBの場合文字列に"を付ける場合は"を2つ続ける必要があります。
実は、追加の質問をした後に、いろいろと試してみました。
ダブルクォーテーションを増やしたり減らしたりと・・・
しかし、まさか3つも続けるとは思いませんでした。
いろいろと試した結果、引き数はあきらめ、引き数の値を返す関数をつくり、
その名前を入れると、とりあえずやりたいことが出来ました。
でも、改めてこのやり方で試してみたいと思います。
ありがとうございました。
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
ご確認ください。
ありがとうございます。
これで解決!
と思ったのですが、呼び出す関数に引数が必要となりました。
>関数選択 = Eval(関数 & "()")
を、関数選択 = Eval(関数 & "(" & 引数 & ")")
とかやっているのですが、うまくいきません。
引数のある関数は無理なのでしょうか?
No.2
- 回答日時:
ありがとうございます。
Eval 関数でいいみたいですが、さらに続きがあります。
その呼び出す関数に、引数があります。
引数がある場合が、うまくいきません。
どうすればいいのでしょうか?
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
ありがとうございます。
とてもかわいい猫ですね~
猫好きの私としてはたまりません。
おっと、猫ではなくEvaluateですが、
subまたはfunctionが定義されていません。
ってでました。
何かライブラリの読み込みが必要なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルである行以下全部を削...
-
Simejiで作ったきせかえを消す...
-
Google Earth Pro(グーグルア...
-
OutlookExpressメール本文が選...
-
戸惑う、惑うの違いはなんですか。
-
Jw-cadの範囲指定で文字が選択...
-
Wordでドロップダウンリスト連動
-
Androidのスマホで毎回毎回ホー...
-
アクセス(ACCESS)フォ...
-
Excel VBAでn行毎に行の選択
-
「無」と「未」の使い方
-
VBAでファイルを開くときにファ...
-
白飛びした(明るい)写真をiPhon...
-
Photoshop で8bit /チャンネル ...
-
パスキーについて 家族と使って...
-
Wordデータの色を反転させたい
-
gimpで色交換できません。
-
スポイトツールがどの色を取っ...
-
PhotpShopでかすれた墨書を浮き...
-
photoshop 日本地図の中を塗る...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルである行以下全部を削...
-
Excel VBA あるセルでENTERを押...
-
「無」と「未」の使い方
-
VBAでファイルを開くときにファ...
-
ipadのpagesでMS明朝を使う方法...
-
Wordでドロップダウンリスト連動
-
Jw-cadの範囲指定で文字が選択...
-
Google Earth Pro(グーグルア...
-
Simejiで作ったきせかえを消す...
-
「これが」「これで」いいです...
-
EXCEL VBAで全選択範囲の解除
-
大至急!
-
EXCELピボットテーブル(複数ア...
-
シフトキーを使った範囲選択が...
-
Androidのスマホで毎回毎回ホー...
-
Excel 行列が選択出来ない
-
WORDでテキストを全て選択し一...
-
ピボットテーブル 矢印が出な...
-
Excel VBAでn行毎に行の選択
-
選択と採択の違い
おすすめ情報