Page 535 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼ユーザーが数式を入力 陽炎 03/1/12(日) 2:11 ┣Re:ユーザーが数式を入力 ポンタ 03/1/12(日) 10:05 ┃ ┗Re:ユーザーが数式を入力 陽炎 03/1/13(月) 1:27 ┃ ┗Re:ユーザーが数式を入力 ポンタ 03/1/13(月) 9:26 ┣Re:ユーザーが数式を入力 ichinose 03/1/13(月) 10:12 ┃ ┗Re:ユーザーが数式を入力 ポンタ 03/1/13(月) 10:48 ┗Re:ユーザーが数式を入力 陽炎 03/1/13(月) 12:12 ─────────────────────────────────────── ■題名 : ユーザーが数式を入力 ■名前 : 陽炎 <yohey@jn2.so-net.ne.jp> ■日付 : 03/1/12(日) 2:11 -------------------------------------------------------------------------
はじめまして ユーザーに変数を含む数式を入力させたい のですがなかなかうまくいきません. VBA初心者なので低レベルな質問かも しれませんが結構困っています. 自分で作ってみたのはおおまかには ↓のようなプログラムです. Dim x, f Dim msgx, msgf As String '(1)fに変数xを含む数式を入力 msgf="関数を入力してください" f = InputBox(msgf) '(2)変数xの値を入力 msgx="xの値を入力してください" x = InputBox(msgx) '(3)fの計算結果を表示 MsgBox(f) どうやら数式をただの文字列として 認識してしまっているようなのですが なにかいい方法はないでしょうか |
>'(1)fに変数xを含む数式を入力 >msgf="関数を入力してください" >f = InputBox(msgf) ここでどんな式を入力させようとしているかによって、 簡単だったり、ちょっと難しくなるだけで済んだり、 すごく難しくなったり、 ほとんど不可能になったりするように思います。 入力させたい式を例示するとレスがつきやすいと思います。 |
>入力させたい式を例示するとレスがつきやすいと思います。 ご意見ありがとうございます. 入力させたいのはごく初等数学的な数式 たとえば f = x ^ 2 + x + 1 や f = sin ( x ) などです. |
私の知る限り、ほとんど不可能だと思います。 理由その1 VBAは「f = x ^ 2 + x + 1」を式として認識しない 理由その2 「f = InputBox(msgf)」は文字列型を返すが、 VBAは文字列を式として評価できない。 (私が知らないだけかもしれませんが・・・) 上記2つの理由から、どうしても実現したい場合は、 "f = x ^ 2 + x + 1"が入力されたら、 "x * x + x + 1"を計算せよ。 と、いうように式とその解き方をコード内に明記してしてください。 以下がそのサンプルコードになります。 Sub test() Dim f As String Dim x As Single Dim msgf As String Dim msgx As String msgf = "関数を入力してください" f = InputBox(msgf) msgx = "xの値を入力してください" x = InputBox(msgx) Select Case f Case "x ^ 2 + x + 1" MsgBox (x * x + x + 1) Case "Sin(x)" MsgBox (Sin(x)) End Select End Sub 与えられる可能性のある全ての式について 式とその解き方を明記しないと動きませんから、 ほとんど不可能だと思います。 |
▼陽炎 さん、ポンタさん、 おはようございます。 細かいエラー処理はしていませんが、Evaluateメソッドを使用してみました。 Sub test() Dim f As String Dim x As Single Dim msgf As String Dim msgx As String msgf = "関数を入力してください" f = InputBox(msgf) msgx = "xの値を入力してください" x = InputBox(msgx) f = Replace(f, "x", x) MsgBox Application.Evaluate(f) End Sub |
ichinose さん、おはようございます。 Evaluate(f) って言う命令あるんですね。(^_^;) Perlなどにも同様の命令があるので、 探したことがあるのですが、見つからなかったため、 ないんだろうと思い込んでおりました。 ありがとうございます。 |
ポンタさん,ichinoseさんありがとうございました. やりたかったことがなんとかできました. |