プロが教える店舗&オフィスのセキュリティ対策術

VB.NETでEvaluate()関数を使って、プログラム実行中に決まる数式を評価させたいのですが、下記の(A)のように数式を" "で囲まない形で渡せば正しく評価されるのですが、(B)のように数式が文字列の形になっていると、このまま、文字列を渡してもうまくいきません。(B)のような形になってしまっている数式をEvaluate()関数で評価させるためには、(B)から(A)の形に持っていきたいのですが、どのようにすればよいのかがよく分かりません。

数式の構造自体がプログラムの実行中に文字列の形で処理させて生成されるのですが、このように文字列の形になっている数式を、Evaluate()関数で評価させるためには、どのようにすればよいのでしょうか。
----------------------------------------
Imports Microsoft.Office.Interop
Module Module1
 Sub Main()
  Dim xlApp As New Excel.Application
  Dim i1 As Integer
  Dim i2 As Integer
  Dim term_i As String
  Dim ans_i As Integer
  i1 = 2
  i2 = 3
  term_i = i1 + i2 + 5 ' (A)
  term_i = "i1 + i2 + 5" ' (B)
  ans_i = xlApp.Evaluate(term_i)
  MsgBox(ans_i)
 End Sub
End Module
----------------------------------------

よろしくお願いします。(WindowsXP,VB2010)

A 回答 (3件)

ANo.2です。



「式が求まっていない」というのがイマイチ良く判りませんが。
「i1+i2+5」だけではなく、場合によっては「i1-i2+5」になったり「i1*i2+5」になったりするという事でしょうか。
それとも、変数i1、i2の値は演算直前まで決まらないという意味ですか?

前者なら、式が決まった時点で変数の値と、決定した演算子で文字列を作成します。

後者なら、演算直前に term_i = i1 & " + " & i2 & " + 5" とするだけです。
    • good
    • 0
この回答へのお礼

前者です。

> 式が決まった時点で変数の値と決定した演算子で文字列を作成します。

なんとなく、どのようにすればいいのかが分かってきました。
これでやってみます。ありがとうございました。

お礼日時:2012/11/13 14:50

数日前に同じような回答をした筈なのですが、ご理解いただけていなかったようですね。


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"
にする方法が知りたいのです。

よろしくお願いします。

補足日時:2012/11/13 09:04
    • good
    • 1

そもそも,ExcelのEvaluate関数を使っているのですから,


Visual Basic側の変数を渡す術はなく,変数の値を文字列にするしかありません。

式木をこねくり回せばデリゲート経由で直接処理が可能だとは思いますが……。
    • good
    • 0
この回答へのお礼

> Visual Basic側の変数を渡す術はなく,
> 変数の値を文字列にするしかありません。

変数は渡せないので変数名を変数の中身に置き換えて渡してみます。
ありがとうございました。

お礼日時:2012/11/13 14:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています