- ベストアンサー
Evaluate()関数を使って数式を評価する方法
- VB.NETのEvaluate()関数を使用して、プログラム実行中に決まる数式を評価する方法について説明しました。
- 数式を文字列の形で処理させ、Evaluate()関数で評価するためには、数式を" "で囲まずに渡す必要があります。
- また、数式の構造自体がプログラムの実行中に生成される場合は、数式を文字列として表現する方法も紹介しました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.2です。 「式が求まっていない」というのがイマイチ良く判りませんが。 「i1+i2+5」だけではなく、場合によっては「i1-i2+5」になったり「i1*i2+5」になったりするという事でしょうか。 それとも、変数i1、i2の値は演算直前まで決まらないという意味ですか? 前者なら、式が決まった時点で変数の値と、決定した演算子で文字列を作成します。 後者なら、演算直前に term_i = i1 & " + " & i2 & " + 5" とするだけです。
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
数日前に同じような回答をした筈なのですが、ご理解いただけていなかったようですね。 Evaluateは、それまでのソースを読んでいるわけではありませんので、VB.Netで使用されていた変数の中身などまったく知りません あくまでも文字列で与えられた演算式だけで演算を行うものです。 「i1+i2+5」を計算しろと渡されても『i1ってなに?i2ってなに?』と、理解できません。 「i1+i2+5」ではなく、「2+3+5」という文字列を作って渡してあげる必要があります。 term_i = "i1 + i2 + 5" ↓ term_i = i1 & " + " & i2 & " + 5" これで Term_i = "2 + 3 + 5" になりますのでEvaluateもちゃんと演算できます。 正しいと言われている↓ですが、2+3+5の演算はVB.Netが行っています。 term_i = i1 + i2 + 5 ' (A)
補足
質問の意図が分かりにくくて申し訳ありません。 数日前のご質問の回答を参考に term_i = "i1 + i2 + 5"を term_i = i1 & " + " & i2 & " + 5" の形にすればできることは理解できたのですが、 今回、困っていることは、コードを書く時点では i1 + i2 + 5の式がまだ求まっていないので事前に term_i = i1 & " + " & i2 & " + 5" と記述することができず、プログラム実行中に 変数term_iに"i1 + i2 + 5"が生成された後に 変数term_iの内容を i1 & " + " & i2 & " + 5" の形にする必要があります。 プログラムはi1とi2が変数と分かっていますので "i1" & " + " & "i2" & " + 5" という形にはできるのですが "i1","i2"の部分が文字列になっていますので i1 & " + " & i2 & " + 5"の形にするには "i1","i2"の部分をi1,i2のように" "がない形に しなければなりませんが どのようにすればよいのかがよく分からないのです。 整理しますと term_i = "i1 + i2 + 5" または term_i = "i1" & " + " & "i2" & " + 5" から term_iの中身を i1 & " + " & i2 & " + 5" にする方法が知りたいのです。 よろしくお願いします。
- Yune-Kichi
- ベストアンサー率74% (465/626)
そもそも,ExcelのEvaluate関数を使っているのですから, Visual Basic側の変数を渡す術はなく,変数の値を文字列にするしかありません。 式木をこねくり回せばデリゲート経由で直接処理が可能だとは思いますが……。
お礼
> Visual Basic側の変数を渡す術はなく, > 変数の値を文字列にするしかありません。 変数は渡せないので変数名を変数の中身に置き換えて渡してみます。 ありがとうございました。
お礼
前者です。 > 式が決まった時点で変数の値と決定した演算子で文字列を作成します。 なんとなく、どのようにすればいいのかが分かってきました。 これでやってみます。ありがとうございました。