Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2113 / 2272 ツリー ←次へ | 前へ→

【3867】文字列になっている計算式の動かし方について しゃお 04/11/18(木) 14:19 質問[未読]
【3868】Re:文字列になっている計算式の動かし方につ... クロ 04/11/18(木) 15:17 発言[未読]
【3869】Re:文字列になっている計算式の動かし方につ... しゃお 04/11/18(木) 16:12 質問[未読]
【3870】Re:文字列になっている計算式の動かし方につ... クロ 04/11/18(木) 18:03 回答[未読]
【3873】Re:文字列になっている計算式の動かし方につ... しゃお 04/11/19(金) 8:58 お礼[未読]

【3867】文字列になっている計算式の動かし方につ...
質問  しゃお  - 04/11/18(木) 14:19 -

引用なし
パスワード
   はじめまして。
Access2000にてデータベースを作成しているのですが下記の症状の解決方法が
わかりません。
どなたか分かる方いましたらご教授下さい。

とあるマスタのフィールドに計算式自体を登録し、その計算で求められた数値を
表示させたいのです。

計算式マスタ     項目マスタ          入力データ
ID  | 計算式   項目Code | 項目名   DataNo |項目Code| 値
001 | "(A+B)/C"    001 |  A     00001 |  001 | 10
002 | "(A+C)-B"    002 |  B     00001 |  002 |  5
003 | "A+B+C"     003 |  C     00001 |  003 |  2

実際には入力データに計算に必要な各項目の数値をそれぞれ入れていき入力
データに対応した計算式を計算式マスタより取り込み計算させようとしています。

上にある例として入力される入力データのDataNo「00001」に対する計算式は、
計算式マスタ「001」を使用しるとします。
この場合項目Aには10、項目Bには5、項目Cには2が入ってるので(10+5)/2となり
求めたい値が7.5になります。

VBAで行った処理として、計算式マスタ001の計算式文字列である"(A+B)/C"をLoop文で頭から1文字ずつ回しAやBの部分を値の10や5へと変換し結果的に"(10+5)/2"
という文字列へ変換しています。
あとはこの文字列になってしまっている計算式を動かして答えである7.5を導き
たいのですが方法がわかりません。

何か良い手はありますでしょうか?
分かりにくい説明で申し訳ありませんがよろしくお願い致します。

【3868】Re:文字列になっている計算式の動かし方に...
発言  クロ  - 04/11/18(木) 15:17 -

引用なし
パスワード
   計算式パターンは3つ以外にあるのでしょうか?

【3869】Re:文字列になっている計算式の動かし方に...
質問  しゃお  - 04/11/18(木) 16:12 -

引用なし
パスワード
   ▼クロ さん:
>計算式パターンは3つ以外にあるのでしょうか?

回答ありがとうございます。
計算式パターンは3つ以上あります。
というのも使用する計算式や項目が多い上に今後運用していく上でも増えていく
可能性があるとの事で、内部的に計算式を持たせず計算式そのものをマスタの中
に登録してしまおうと思いこのような形としました。

【3870】Re:文字列になっている計算式の動かし方に...
回答  クロ  - 04/11/18(木) 18:03 -

引用なし
パスワード
   Eval関数で解決?
Debug.Print Eval("10+5/2")
で7.5が返ると思います。

【3873】Re:文字列になっている計算式の動かし方に...
お礼  しゃお  - 04/11/19(金) 8:58 -

引用なし
パスワード
   ▼クロ さん:
>Eval関数で解決?
>Debug.Print Eval("10+5/2")
>で7.5が返ると思います。

遅くなりましてすみません。確認できました。
ありがとうございます。
本当に助かりました。

2113 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078255
(SS)C-BOARD v3.8 is Free