テキストボックスに計算式を入力して、計算結果を出すには?

解決


KS  2009-05-06 01:25:05  No: 101707  IP: 192.*.*.*

テキストボックスに、たとえば  ”2+3”を書き込んで、”5”という
計算結果を出したいと考えています。
Val関数を使うと変換が  2  で止まってしまいます。

入力ができれば、テキストボックスにはこだわりません。

編集 削除
オショウ  2009-05-06 07:26:31  No: 101708  IP: 192.*.*.*

VB6での話ですよね?!

http://kone.vis.ne.jp/program/#sample33

これはよくできていると思いますが・・・

以上。

編集 削除
KS  2009-05-06 18:24:00  No: 101709  IP: 192.*.*.*

オショウさん、ありがとうございます。
すごいですね!  
ソースコードを読み取ろうとしましたが、理解できないところだらけです。
たとえば、

Dim st$
Dim i#, v#, l&, j&, k&
Dim STime&
Dim PCol&

このような書き方は初めて見ました。
VB入門書では  「Dim  ***  As  ***」となっています。
また、「If Col > 6 Then Col = 1」  のあとに  「End  If」  がありません。
「End  If」を書き忘れると、実行時にエラーとなるはずなのに・・・。

下記の部分を調べて試してみます。

Dim c As New Calc
st = Text1.Text
v = c.MCalculation(st)

編集 削除
魔界の仮面弁士  2009-05-06 19:13:36  No: 101710  IP: 192.*.*.*

> テキストボックスに、たとえば  ”2+3”を書き込んで、”5”という
> 計算結果を出したいと考えています。


Option Explicit

Private Sub Form_Load()
    Text1.Text = "2+3"
End Sub

Private Sub Command1_Click()
    Dim v As Variant
    With CreateObject("ScriptControl")
        .Language = "VBScript"
        v = .EVal(Text1.Text)
    End With
    MsgBox CStr(v)
End Sub

編集 削除
KS  2009-05-07 08:33:44  No: 101711  IP: 192.*.*.*

魔界の仮面弁士さん、ありがとうございます。

With CreateObject("ScriptControl")
        .Language = "VBScript"
        v = .EVal(Text1.Text)
End With

このコードの意味を調べて試してみます。

編集 削除
KS  2009-05-07 09:27:11  No: 101712  IP: 192.*.*.*

オショウさん、下記のコードで試したら、

    Dim v As Variant
    Dim c As Variant
    Dim st As String
    
    st = Text1.Text
    v = c.MCalculation(st)
    Text2.Text = Str(v)

v = c.MCalculation(st) のところで、「オブジェクトが必要です」というエラーメッセージが出てしまいます。  この場合の”オブジェクト”の意味がわかりません。  もう少し調べてみます。

編集 削除
KS  2009-05-07 09:43:07  No: 101713  IP: 192.*.*.*

魔界の仮面弁士さん、下記のコードで試したら、

    Dim v As Variant
    
    With CreateObject("ScriptControl") 
        .Language = "VBScript"
        v = .EVal(Text1.Text)
    End With
    
    Text2.Text = Str(v)

With CreateObject("ScriptControl") のところで、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーメッセージが出てしまいます。

計算式全体を処理できる、Val関数のようなものは用意されていないのでしょうか?

編集 削除
KS  2009-05-07 10:45:29  No: 101714  IP: 192.*.*.*

オショウさん、Calcファイルのコードを見ていませんでした。
「オブジェクトが必要です」というのはこのコードのことですね?
Form1のコードはCalcファイルのコードを呼び出しているのだとおもいます。
でも、大量の難しい内容です。

編集 削除
kone  2009-05-10 10:38:01  No: 101715  IP: 192.*.*.*

上記サイトのものです。
余り他人が見ることを考えてないので、汚いコードですいません。
手っ取り早く問題を解決するなら、魔界の仮面弁士さんの方法の方が
お手軽でよいと思います。

一応私のコードについて補足しておきます。

> Dim st$
> Dim i#, v#, l&, j&, k&
> Dim STime&
> Dim PCol&

> このような書き方は初めて見ました。
> VB入門書では  「Dim  ***  As  ***」となっています。

余りきれいな書き方ではないのですが、as long→&、as double→#
as string→$のように変数定義部は書き換えることができます。
ヘルプのDim文のところやデータ型の部分に書いてあるかと思います。

> また、「If Col > 6 Then Col = 1」  のあとに  「End  If」  がありません。
> 「End  If」を書き忘れると、実行時にエラーとなるはずなのに・・・。

Thenの後に命令文を書いた場合、End Ifは必要ありません。
ただし、命令文は1行しかない場合に限ります。

> v = c.MCalculation(st) のところで、「オブジェクトが必要です」というエラーメッセージが出てしまいます。
元のサンプルでのcの変数定義は、Variantでなく以下のようになっています。
Dim c As New Calc

> でも、大量の難しい内容です。
計算式を自分で処理するのは、意外に難しい問題です。
コンパイラの作り方の本なんかを見ると書いてありますが、
プログラム経験がないと難しいかも知れません。

編集 削除
もうみていない?  2009-05-10 10:53:23  No: 101716  IP: 192.*.*.*

>With CreateObject("ScriptControl") のところで、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーメッセージが出てしまいます。

これを解決するのが一番手っ取り早いと思いますよ。

編集 削除
魔界の仮面弁士  2009-05-10 12:29:27  No: 101717  IP: 192.*.*.*

もし、ScriptControl が未インストールの環境なのだとしたら、
http://www.microsoft.com/downloads/details.aspx?FamilyID=151ef63d-23e9-4367-bb25-37310c6222fe&displaylang=ja
から入手できます。

編集 削除
KS  2009-05-12 02:22:57  No: 101718  IP: 192.*.*.*

kone さん、ありがとうございます。
DimやIf-Thenの書き方について、初めて知りました。
でも、

> v = c.MCalculation(st) のところで、「オブジェクトが必要です」というエラーメッセージが出てしまいます。

元のサンプルでのcの変数定義は、Variantでなく以下のようになっています。
Dim c As New Calc

これの意味がわかりません。

編集 削除
KS  2009-05-12 02:28:50  No: 101719  IP: 192.*.*.*

もうみていない?  さん、ありがとうございます。

>これを解決するのが一番手っ取り早いと思いますよ。

解決方法が・・・・?
ごめんなさい。

編集 削除
KS  2009-05-12 02:51:12  No: 101720  IP: 192.*.*.*

魔界の仮面弁士さん、ありがとうございます。
教えていただいたページを開きましたが、「ActiveX コントロールのインストール」というメニューが出てきません。
Meなのに、なぜメニューが出てこないのかよくわかりません。

編集 削除
ちょっと立ち寄りました、  2009-05-13 19:29:11  No: 101721  IP: 192.*.*.*

ScriptControl のブラウザ画面に「確認」というボタンはありませんか?
海賊版Windowsを排除するため、正規なライセンスのWindowsかどうか試されます。
それでOKであればダウンロードできるはずですよ。
もし動かないなら、ブラウザのセキュリティ設定に問題があるのかもしれませんね。

編集 削除
KS  2009-05-17 23:50:52  No: 101722  IP: 192.*.*.*

ちょっと立ち寄りました さん、ありがとうごじます。
確認のための画面を開こうとしたら、アップデートが必要と出ました。
アップデートしようとしたら、外国語対応以外のアップデート項目はありません
と出ました。
富士通のFMV、Meです。
セキュリティは、スパイボットとサンダーバードを入れてあります。

編集 削除
KS  2009-05-18 05:21:06  No: 101723  IP: 192.*.*.*

皆様ありがとうございます。
Mid,Asc,Val,Strの関数を使って、「数字」「演算子」「数字」の計算式を
テキストボックスに入力し計算結果を出力することができました。

初歩的な方法であると思いますが、この考え方で続けていきたいと思います。
計算式に"( )"がある場合も含めて、考えてみます。

これからもまた、教えていただきたくお願いいたします。

編集 削除