■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#14392-0計算式文字列から計算結果を取得する方法moro2000-01-26(水) 19:07
     #14404-0RE#14392:計算式文字列から計算結果を取得する方法HelpMe2000-01-26(水) 20:47
     #14420-0RE#14392:計算式文字列から計算結果を取得する方法魔界の仮面弁士2000-01-27(木) 03:00
     #14435-0RE#14392:計算式文字列から計算結果を取得する方法moro2000-01-27(木) 11:38
#14392-0
計算式文字列から計算結果を取得する方法
お世話になります。
計算式文字列から計算結果を取得する良い方法を探しています。
以下のように文字列中の演算子やカッコから優先順位を考慮した
計算結果が取得したいのですが...
 input:"1+2*3" → output:7
 input:"(1+2)*3" → output:9

VBの標準関数で簡単に実現できないでしょうか?
VBのデバッグウィンドウでは実現しているんですよね。
自分で作るしかないのかなぁ(ロジックが途方もないような...)
宜しくお願いいたしますm(_ _)m
#14404-0
RE#14392:計算式文字列から計算結果を取得する方法
> 計算式文字列から計算結果を取得する良い方法を探しています。
> 以下のように文字列中の演算子やカッコから優先順位を考慮した
> 計算結果が取得したいのですが...
>  input:"1+2*3" → output:7
> VBの標準関数で簡単に実現できないでしょうか?

ご希望な回答ではありませんが参考までに

逆ポーランド記法を使って自分で作ることはできると思います。
でも、自分では作ったことはありません。

書籍にそのものズバリ出ていました。
VisualBasicによる はじめてのアルゴリズム入門
技術評論社
定価 2480円+税

この書籍のP270を本屋で立ち読みして、よかったら購入するのも良いかもね。
#14420-0
RE#14392:計算式文字列から計算結果を取得する方法
>  input:"1+2*3" → output:7
>  input:"(1+2)*3" → output:9
> VBの標準関数で簡単に実現できないでしょうか?

標準関数での実現はできませんが、それでもいくつかの方法があります。


1. Windowsアクセサリの電卓に計算させ、その値をクリップボード経由で取得する方法

   これは、ヘルプで、SendKeys ステートメントの「使用例」と、
   Clipboardオブジェクトについて、調べてみてください。


2. Script Controlを利用する方法

   これは、Script Control(MSSCRPIT.OCX)がインストール済みであることが条件です。
   (VB6なら、CD-ROMの奥に眠ってますし、MicrosoftのHPからダウンロードしてきてもOKです)

   以下に、サンプルを示します。

   Option Explicit

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

   Private Sub Command1_Click()
       Dim Script As Object
    
       Set Script = CreateObject("MSScriptControl.ScriptControl")
       Script.Language = "VBScript"

       Text2.Text = Script.Eval(Text1.Text)
       Set Script = Nothing
   End Sub

# Evalの代わりに、AddCodeとRunメソッドを使う方法もあります。


3. Jetを使う方法

   別にJetでなくても良いのですが、SQL文内に計算式を埋め込み、
   データベースエンジンに計算させてしまおう、というやり方です。

       SELECT (1+2)*3  FROM Hoge


4. 非表示のExcelなどの、式計算機能を持ったツールを併用。

   処理としては重いので、詳細は割愛します。
   実際には、式計算機能を持ったOCXも発売されているので、
   それを購入して使う方が、実用的です。


5. 全て自分で計算

   #14404 のHelpMeさんの書かれた内容とほぼ同じなので、こちらも詳細は割愛。(^^;)
#14435-0
RE#14392:計算式文字列から計算結果を取得する方法
HelpMe様、魔界の仮面弁士様、早速のフォローありがとうございます。
魔界の仮面弁士様のサンプルを見てフッと記憶が蘇ったのですが、
そういえばAccessに Eval() ってのがあってそのものズバリな関数だったのです。
で、今回はAccessで行こうと思います。

ところで「Jetを使う方法」とは思いつきませんでした。
素晴らしい発想ですね。
「どうしてもVBで」って事になったら是非この方法を使おうと思います。
このページと関連する記事:
#1348-1文字列の式の扱いについて2004-03-11(木) 01:30
#43209-0文字列を計算2001-05-20(日) 23:38
#225-1AddCodeで追加した変数がリソースから解放できない2001-06-14(木) 22:11
#95-1テキストボックスに入力された数式の計算結果を出したい2001-05-27(日) 04:38
#145-1たびたびごめんなさい(^^;2002-08-13(火) 12:59
#35770-0計算方法2000-12-21(木) 11:58
#164-2数点の入力データをもとに最小2乗法による、円の式推定2003-11-14(金) 16:43
#9469-0電卓2000-04-10(月) 01:00
#7215-0計算機の値2000-04-07(金) 11:56
#462-0JavaScriptのevalのようなもの2002-03-21(木) 16:08
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)