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)
No.3ベストアンサー
- 回答日時:
ANo.2です。
「式が求まっていない」というのがイマイチ良く判りませんが。
「i1+i2+5」だけではなく、場合によっては「i1-i2+5」になったり「i1*i2+5」になったりするという事でしょうか。
それとも、変数i1、i2の値は演算直前まで決まらないという意味ですか?
前者なら、式が決まった時点で変数の値と、決定した演算子で文字列を作成します。
後者なら、演算直前に term_i = i1 & " + " & i2 & " + 5" とするだけです。
前者です。
> 式が決まった時点で変数の値と決定した演算子で文字列を作成します。
なんとなく、どのようにすればいいのかが分かってきました。
これでやってみます。ありがとうございました。
No.2
- 回答日時:
数日前に同じような回答をした筈なのですが、ご理解いただけていなかったようですね。
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"
にする方法が知りたいのです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel 関数? 文字列になっている数値を計算したいのですが
Excel(エクセル)
-
数式を残したまま、別のセルに答えを表示する
Excel(エクセル)
-
Evaluateを使ってマクロに記述した関数に変数を使う方法
Excel(エクセル)
-
-
4
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
5
Select Case文でこのようなことは可能でしょうか?
Visual Basic(VBA)
-
6
一つのセルに計算式を入れて別のセルに答えを出したい
Windows Vista・XP
-
7
エクセルVBAでSUMPRODUCT関数の代用
Excel(エクセル)
-
8
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
-
9
VBA Evaluate関数 型が一致しません
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
JSPでHashMap・配列の変数の値...
-
C#について質問です。文字列型(...
-
指定した日付が何日前なのかを...
-
javaの演算子の部分ですが 4行...
-
char型での演算子
-
Integer型やArrayList型をint型...
-
ArrayListの要素数の上限
-
matchesを否定文として使う方法...
-
javaのCSVデータ読込についてです
-
Evaluate()に文字列の形式の数...
-
ResultSetの内部構造(Java)
-
文字列生成を総当りで行う場合
-
MySQLのblob型の日本語文字列を...
-
プログラミング java javaでプ...
-
リテラルの問題
-
DOSバッチで変数の値を変数名に...
-
暗号化文字列を英数字のみにしたい
-
Firefoxでvalueの値を変更できない
-
JSPでの計算結果表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Stringクラスの変数の格納アド...
-
結合した文字列をファイル名に...
-
BCD形式で時刻を!
-
DateTimePickerに値を入れたい...
-
Evaluate()に文字列の形式の数...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
DOSバッチで変数の値を変数名に...
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
Javaの問題なのですが、「3文字...
-
matchesを否定文として使う方法...
-
JSPでの計算結果表示
-
8桁整数を限りなく短い文字列に...
-
指定した日付が何日前なのかを...
おすすめ情報