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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
Excel 関数? 文字列になっている数値を計算したいのですが
Excel(エクセル)
-
数式を残したまま、別のセルに答えを表示する
Excel(エクセル)
-
Evaluateを使ってマクロに記述した関数に変数を使う方法
Excel(エクセル)
-
-
4
VBA Evaluate関数 型が一致しません
Excel(エクセル)
-
5
Select Case文でこのようなことは可能でしょうか?
Visual Basic(VBA)
-
6
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
7
一つのセルに計算式を入れて別のセルに答えを出したい
Windows Vista・XP
-
8
エクセルVBAでSUMPRODUCT関数の代用
Excel(エクセル)
-
9
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
byteからshortへの変換について
-
【Excel VBA】繰り返し処理がで...
-
javaというか文字列について少...
-
ダブルクォーテーションを含む...
-
Javaで改行などが出来ないのです。
-
IF関数でEmpty値を設定する方法。
-
Javaで電卓を作りたい
-
応用情報技術者試験の令和元年...
-
論理演算子”||”またはの入力方法
-
ダブルクォーテーションのrepla...
-
Javaでお絵描きソフトを作りた...
-
byte[] を long,float とかに...
-
VBSエラー"オブジェクト型の変...
-
javaです。1月1日から日数入れ...
-
ページング
-
パソコンキーボードで時分秒を...
-
エクセルで小数の中の最大値を...
-
ArrayListからBean配列に値をセ...
-
Javaで文字と数字が混ざったも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
DateTimePickerに値を入れたい...
-
wsprintf関数の使い方について
-
Stringクラスの変数の格納アド...
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
このプログラミング誰か教えて...
-
Evaluate()に文字列の形式の数...
-
JSPでHashMap・配列の変数の値...
-
このプログラミング誰か教えて...
-
特定の文字列を複数抜き出した...
-
matchesを否定文として使う方法...
-
DOSバッチで変数の値を変数名に...
-
Javaの問題なのですが、「3文字...
-
excel vba 時間計算と条件分岐...
-
実行シェルからCOBOLへパラメー...
-
日付や時刻の"01"を" 1"に変換...
-
VB6,論理演算子Orの使い方がわ...
-
char型での演算子
おすすめ情報