- ベストアンサー
テキストのデータ型
ある数式を計算しグラフを作るプログラムを作っていますが、テキストに数式をいれて、計算させようとすると、「型が一致しません」とでます。ソースは以下の通りです。 For x1 = xsta to xend y1=CSng(Text1.Text) Picture1.PSet (x1, y1) next x1 ここで、text1に「2*x1+1」みたいな数式を入れたいと考えています。 ちなみにxsta,xend,x1,y1ともにsingleです。CSngの使い方が間違っているのでしょうか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 Text1.Textの内容は、 「2*x1+1」 という文字列です。文字列中の「*」や「+」の記号、「x1」という変数名は、意味を持ちません。 数式ではなく、数式のように見える、あくまで文字列です。 数式と思っているのはこれを見ている(入力した)人の"勝ってな判断"で、VBは数式とは判断しません。 したがって、「2*x1+1」は数値には変換出来ず、型変換エラーになります。 もしこれを数式として使用するなら、この文字列を、「2」「*」「x1」「+」「1」に分割して計算式を組み立てる必要があります。 それよりも、式が1次関数(ax+bの形)に決まっているなら、2つのテキストボックスに傾きと切片をそれぞれ数値で入力するようにして、 y1 = CSng(Text1.Text) * x1 + CSng(Text2.Text) のようにするといいと思います。 ちなみに、このコードの「*」や「+」、「x1」と、最初の「2*x1+1」の中の「*」や「+」、「x1」は、まったく意味が違う別の物ということですよ。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
自由に入力した四則多項式に従って値を計算させるには、数式のコンパイラの仕組みを作る必要があるように思います。逆ポーランド記法に変換し、演算するなど結構面倒そう。ミスがあると、影響が大きいと思います。熟達者でないと避けるべきと思います。しかしやって見たくなる仕様個所ですね。式の方が限定されたパターンなら、演算記号と変数部分を分解し、シコシコ演算すれば解決するかも。
- todo36
- ベストアンサー率58% (728/1234)
VBに数式を文字列で式を与えて計算させる機能はありませんので、外部のコンポーネントを使うしかありません。 Excelを使うのであれば、こんな感じ Private Sub Form_Click() Dim Xls As Object 'Excel.Application Dim X1 As Single Dim Y1 As Single Dim s As String Set Xls = CreateObject("Excel.Application") For X1 = 1 To 10 s = "2*x1+1" s = Replace(s, "x1", X1) Y1 = Xls.Evaluate(s) Print X1, Y1 Next Set Xls = Nothing End Sub