• ベストアンサー

VBで自身の研究用にグラフ描写ソフトを作成中ですが、行き詰ってます

VB2008で研究用ソフトの作成をしています。 数式を入力しそのグラフを書く、と言ったものを作ろうとしているのですがうまくいきません。 たとえば、TextBox1に何か数値を入力したとして、 Dim str As String = textbox1.text Dim num As Decimal = Decimal.Parse(str) とすれば確かにnumはInt型で計算ができるのですが、同様にy=3*xのグラフを入力してそのxに-1から1までの数値を代入させて点を取りたいとき、この方法ではどうにもできずに困っています。 たとえば上の例では、3*xを入力した後xに好きな値を代入できるようにするようにはどうしたらできるのでしょうか? 説明がわかりにくくてすみません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

こんな方法はどうでしょうか? TextBox1.Textが3+xとかの場合です。 Sub sample() Dim sc As Object = CreateObject("MSScriptControl.ScriptControl") sc.Language = "VBScript" For x As Integer = -1 To 1 MsgBox(x & ":" & sc.Eval(TextBox1.Text.Replace("x", x))) Next End Sub

negi0810
質問者

お礼

ありがとうございます^^ がんばっていろいろと考えて見ます。

その他の回答 (1)

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

式y=3*xを文字列として受け取るということですか? str="y=3*x"として考えてみます。 まずxにすきな値を置き換えるには。 str.Replace("x",n) 'nは入力値 n=10であれば str="y=3*10" となります。 しかしこれでは自動で計算できませんよね。 そこで dim y as integer = Integer.Parse(System.Math.BigMul(str.Substring(InStr(str, "="), InStr(str, "*") - InStr(str, "=") - 1), str.Substring(InStr(str, "*"), Len(str) - InStr(str, "*")))) と計算することでyを30と求めることができます。 str.Substring(InStr(str, "="), InStr(str, "*") - InStr(str, "=") - 1) で"="から"*"までの文字を抜き出し(ここでは3) str.Substring(InStr(str, "*"), Len(str) - InStr(str, "*")) で"*"からうしろの文字列を抜き出します(10) Integer.parseはinteger型への変換です。 System.Math.BigMulは掛け算です。

negi0810
質問者

お礼

ありがとうございます^^ 初心者でして複雑なことはわからないのですがいろいろとがんばってみます。

関連するQ&A

  • VB初心者です、初歩的な質問でしたらすみません

    VB2008で私自身の研究用にグラフ描写ソフトを作成中なんですが、TextBox等に数式を入力し、そのグラフを書く・・・と言ったものが作りたいと思っています。 しかし、TextBoxでそれをやろうとすると数値代入ができなくなってしまって(私のやり方の問題だと思うのですが、String型になってしまってdecimal型の数値が代入できないと言う状況になってしまって)困っています。 何かいい方法は無いでしょうか? ※開発初心者で説明等何かと不備があるかと思いますが、申し訳ございません。よろしくお願いいたします。

  • TextBoxをInteger型の変数に代入したい

    開発環境は、VB2005 ExpressEditionです。 TextBoxをInteger型の変数に代入したいのですが。 Dim num01 As Integer 1 num01 = Int(TextBox1.Text) 2 num01 = CInt(TextBox1.Text) 3 num01 = Integer.Parse(TextBox1.Text) 1,2,3どれで実行しても”入力文字列の形式が正しくありません。”とでてしまいます。どなたか良い方法をご存知の方がいたら、教えて下さい。

  • vbの計算ソフト作成にあたって

    vbで電卓を作成しようと思ったのですが、ビルドエラーが発生してうまくできません。 Dim X As Decimal Dim Y As Decimal X = txtValue1.Text Y = txtValue2.Text lblAnswer.Text = X + Y これでは、いけないのでしょうか? (元から記載されていたものは省略しています) 又、使用しているvbは2008 Express Editionです。 回答お願いします

  • Date型へのキャストについて

    VB.NET初心者です。 String型からDate型へキャストをしたいのですが、よそのサイト様を参考にいろいろ試してみたのですが、うまくいかず困っています。どなたか、教えてください。よろしくお願いします。 エラー:『文字列は有効なDateTimeではありません』 Dim str1 As String = "2009/08/01" または Dim str2 As String = "2009/08/01 12:00:00" str2 = str2.substring(0,10).replacce("/","") の形式で取得した値を"yyyy/mm/dd形式で"Date方へキャストしたいのですが.... Dim dt As Date = Date.ParseExact(str, "yyyy/MM/dd", Nothing) Dim dt As Date = Date.parse(str) Dim dt As Date = Ctype(str, Date) など試してみたのですが、#8/1/2009#のように書式がおかしいのですが、どこを直せばよいのでしょうか? Date.ParseExact()でできると思っていたのですが、悩んでいます。よろしくお願いします。

  • VB.NETでExcelの数式バーの処理をさせたい

    Excelのセルにいろいろな数式が入っていて、 この数式を書き出したテキストファイルを読み込ませて、 VB.NETで処理をしたいのですが、 VB.NETで、Excelの文字列関数を含んだ式を処理するには どのように記述すればよいでしょうか。 単なる計算式であれば  Dim xlApp As New Excel.Application  Dim str1 As String  Dim x As Integer  a = "3600 / 60 + 5000"  x = xlApp.Evaluate(a) でできるのですが文字列だとうまくいきません。 例えば、ExcelのシートのA1セルを選択して 数式バーに =MID("ABCDE",2,3) と入力すると その結果のBCDがA1セルに得られますが VB.NETで、 =MID("ABCDE",2,3) から BCD を得るにはどのようにすればよいでしょうか。 なお、=MID("ABCDE",2,3) の式は一例であって、 以下のように、この式をVB.NETで記述する 仕方を知りたいのではありません。  Dim str1, str2 As String  str1 = "ABCDE"  str2 = str1.Substring(2, 3) よろしくお願いします。 (VisualStudio2010 , Excel2003 , WindowsXP SP3)

  • [String]の意味は?

    最近VB.NET2003を始めたものです。 MSDNのヘルプでたまに見かけるのですが、 [String].Compare(str1, str2)の[String]は何なのでしょうか? Dim str As Stringと記述するのと、 Dim str As [String]と記述するのとでは、意味が違うのでしょうか? なおStringクラスの意味は分かっています。 [型名]という記述をするということはどういうことなのかを教えてください。

  • C++で作成したDLLを vb.net から動的に

    C++で作成したDLLを vb.net から動的に使用する方法 <DllImport("DllNAME")> _ Private Shared Function FuncName( _   <MarshalAs(UnmanagedType.LPStr)> ByVal str1 As StringBuilder, _   <MarshalAs(UnmanagedType.LPStr)> ByVal str2 As StringBuilder ) As String End Function Sub huga()   Dim result As String = FuncName( "hoge", "piyo" )   MsgBox(result) End Sub 上記方法で 静的にはリンク出来たのですが 動的にリンクする方法がわかりません ご教授ください お願いします!

  • 数式を読みこんで答えをかえすプログラム

    C言語で、「キーボードから入力された数式(加法、減法限定)の答えをかえすプログラム」をつくりたいのですが。。。 ※4+35+287-43など #include<stdio.h> #include<string.h> #define NUM 40 int main(void){ char str[NUM]; int i, result, x; printf("Please input an expression:\n"); scanf("%s", str); x = strlen(str); result = 0; for(i=0; i<=x; i++){ if((str[i] == '+') || (str[i] == '-')){ // printf(","); } printf("%c", str[i]); } } printfで+と-を「,」で区切って、それをヒントにそれぞれ配列の中に入れるのかな、というところまでは出来たのですが。。。 解り易い解説をつけて下さるとありがたいです。よろしくお願いします。

  • VBのテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class

  • VS2005の電卓がエラーだらけ。助けて!!

    VS2005で電卓を作ろうとGUI部分はできました。 ただ並べたです。 そしてコードを書くと、変数名の宣言でもうエラー連発です。 クリアボタン(Button17)を押したら、myClear()関数を呼び出すところまで教えてください! Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myInput As String = "" '入力値 Dim myCalc As String = "+" '演算値 Dim myTotal As Decimal = 0 '合計 Dim myFlag As Boolean = True '入力フラグ(False:数値 True:演算子) End Sub myValue(ByVal setData As Decimal){ myFlag = False myInput += setData TextBox1 = myInput } myCalculate(ByVal setData As String){ Private myWork As Decimal = 0 if(myFlag == False){ myFlag = True myWork = myTotal + MyCalc + myInput myTotal = eval(myWork) myInput = "" TextBox1 = myTotal } else if(setData == "="){ myTotal = 0 MyCalc = "+" } else { MyCalc = setData } } myClear(){ MyCalc = "+" myInput = "" myTotal = 0 TextBox1 = myTotal } Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button17.Click myClear() End Sub

専門家に質問してみよう