ExcelVBAについて質問です。

セルAに解を設定し、セルBに解を求めるためのメソッド名を書きます。
エクセルにあるボタンを押したとき、
セルBに書いてあるメソッド名を読み出して、該当する同じ名前のメソッドを用い
セルAに解をセットすることはできますか?

回答宜しくお願いします。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2008/12/26 22:46:19
  • 終了:2009/01/02 22:50:03

回答(4件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692008/12/26 23:02:27

ポイント23pt

こんな感じでどうでしょうか。

シートにコマンドボタンを配置して、ダブルクリックで開く先に次のコードを記入してください。

Private Sub CommandButton1_Click()
    Select Case Range("B1").Value
        Case "メソッド1"
            Call メソッド1
        Case "メソッド2"
            Call メソッド2
        Case "メソッド3"
            Call メソッド3
    End Select
End Sub

Sub メソッド1()
    Range("A1").Value = "メソッド1の解"
End Sub

Sub メソッド2()
    Range("A1").Value = "メソッド2の解"
End Sub

Sub メソッド3()
    Range("A1").Value = "メソッド3の解"
End Sub

http://q.hatena.ne.jp/

id:harunoharuno

回答ありがとうございます。

できればケース文を使わず、セルから読み取った文字列を元に

メソッドが呼び出せると助かります。

前提としてセルの文字列とメソッド名は同一で構いません。

もしよろしければできるできないに問わず、ご意見など

もう一度解答していただけると嬉しいです。

2008/12/26 23:12:30
id:frkw2004 No.2

ふるるP回答回数192ベストアンサー獲得回数212008/12/26 23:12:52

ポイント23pt

できます。

Evaluate 関数を使います。

セル(1,2)に

'myCalc(2,3)

をセットしておき、標準モジュールに

Function myCalc(a, b) As Double

myCalc = a + b

End Function

Sub main()

s = Sheet1.Cells(1, 2).Value

a = Evaluate(s)

Sheet1.Cells(1, 1) = a

End Sub


を入力します。Mainを実行すると、セル(1,1)にmyCalcの計算結果である5がセットされます。

URLは説明をしているブログです。

http://shoji.blog1.fc2.com/blog-entry-60.html

id:harunoharuno

どうも有難うございます。回答していただいた方法で

やりたいことができました。しかし、副作用なのかどうか、、、、

VBAのデバッグがEvaluateで呼び出された関数内にはいっていきません(ブレークポイントをはってもとまりません)。

これはこういうものなのか・・・メッセージボックスで出力し処理を追うことはできますがなにか良い対応方法はありませんでしょうか?

2008/12/30 13:12:06
id:SALINGER No.3

SALINGER回答回数3454ベストアンサー獲得回数9692008/12/27 08:55:21

ポイント22pt

frkw2004さんの回答にあるEvaluateを使えば可能ですね。

書き換えると

Private Sub CommandButton1_Click()
    Call Evaluate(Range("B1").Value)
End Sub

Sub メソッド1()
    Range("A1").Value = "メソッド1の解"
End Sub

Sub メソッド2()
    Range("A1").Value = "メソッド2の解"
End Sub

Sub メソッド3()
    Range("A1").Value = "メソッド3の解"
End Sub

B1に「メソッド2()」とか入れると意図する動作をします。


この回答にはポイント不要です。

http://q.hatena.ne.jp/

id:harunoharuno

回答有難うございます。回答いただいたのと同じようなコーディングになりましたので

コーディング方法として的を外していないことに少し安心しました。

しかし、VBAのデバッグがEvaluateで呼び出された関数内にはいっていかなくなりました(ブレークポイントをはってもとまりません)。処理はメッセージボックスで確認できますがちょっと苦しいです。適当な対処方法などありましたらあわせて回答していただきたく宜しくお願いします。

2008/12/30 13:17:16
id:frkw2004 No.4

ふるるP回答回数192ベストアンサー獲得回数212008/12/31 12:11:56

ポイント22pt

Evaluateで呼び出す場合、呼び出された関数は完成しているものとするべきでしょう。

単体テストを十分に行って、関数でエラーが出ないようにしましょう。

単体テストをするにあたって、Evaluateで呼び出すのではなく、普通にモジュールの中で呼び出すようにして、

さまざまな入力パターンをテストしましょう。

普通に呼び出す分にはブレークポイントが有効になるはずです。


URLはダミーです。

http://www.net

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません