[[20120403151709]] 『VBAで「×⇒*」、「÷⇒/」と認識して計算結果を普x(アロハー) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで「×⇒*」、「÷⇒/」と認識して計算結果を表示したい』(アロハー)
[Excel2007][OS,Windows Vista]
 以前にお世話になり下記のプログラムを完成させていただきました
大変重宝しており、ありがとうございます。
TSIKI名の関数で、指定したセルに有る計算式の値を表示するものです

例) A1(計算式)  A2(TSIKI)
   5*10       50
   5×10      Value
   100/25      4
   100÷25     Value

この式の中に"×"または"÷"の記号を使った式の場合も、"×"⇒"*"、"÷"⇒"/"と置換え
て計算し、計算結果を表示したいのですが、検索置換Replaceメソトッドだと上手く行きません、
ご教授いただけませんでしょうか?
宜しくお願い申し上げます。    

Function TSIKI(rng As Range)
'文字列混じり計算値の関数
'
Dim MyStr As String
Dim buf As Variant
Dim obj As Object
MyStr = StrConv(rng.Value, vbNarrow)
With CreateObject("VBScript.RegExp")

    .Pattern = "\([^()]*\)"
        .Global = True
        While MyStr Like "*(*)*"
        For Each obj In .Execute(MyStr)
            buf = Application.Evaluate(obj.Value)
            If IsError(buf) Then
                MyStr = Replace(MyStr, obj, "")
            Else
                MyStr = Replace(MyStr, obj, buf)
            End If
        Next obj
    Wend
    TSIKI = Application.Evaluate(MyStr)
    End With
End Function


 以前のスレはこちらですね?
[[20110407171229]] 『計算式内の文字列を無視して計算結果を表示する』(アロハー)

 で、今回の例の場合は値しか無い様なので、こちらで良いのでは?
[[20081012185737]] 『文字列の計算式を計算』(alalfa)

 (HANA) 

 それだけだったら

 Function TSIKI(ByVal txt As String)
    TSIKI = Evaluate(Replace(Replace(txt, "×", "*"), "÷", "/"))
End Function

 で良さそうですが?
 (seiya)

(HANA)さん、その節は、大変お世話になりました
×も÷も"OK"で一瞬、頭のモヤモヤが吹っ飛んだのですが・・・。
説明不足でスミマセン、以前の@TSIKIの場合、下記の例@の通り、計算式内に注釈とし
てカッコ内の文字列は無視する設定としており、今回の@txtcalcですと"#VALUE!となってします
そこで注釈を()ではなく、例Aの様に( )と[ ]を使い分けるのが良いのかと考えました。
再三申し訳有りませんが、コードの修正箇所を伝授いただけませんでしょうか?

 例@ A1(計算式)      A2(関数)
  (2.5+8.0)*5(人)    52.5
  1.5*3.8(u)      5.7

 例A A1(計算式)      A2(関数)
  (2.5+8.0)*5[人]    52.5
  1.5*3.8[u]      5.7

(seiya)さんの、アドバイスこれから確認してみます。
(アロハー)


 >以前の@TSIKIの場合、下記の例@の通り、計算式内に注釈とし 
 >てカッコ内の文字列は無視する設定としており
 でも、最初にご提示のサンプルはその様に成っていませんよね?
 ですから「今回の例の場合は」と但し書きが付いたのですが。
    次にご提示のサンプルも充分とは言えないと思いますが。
    サンプルデータはきちんと作成されるのが良いと思います。

 関数に、SUBSTITUTE関数が有ります。
 SUBSTITUTE(文字列,検索文字列,置換文字列,置換対象)

 検索文字列を、置換文字列に置き換えます。
 事前にこれで処理をした状態で TSIKIにかけると
 コードの変更は不要に思えます。

 また、Replace メソッドをヘルプで調べると
 二つ出てきますね。

 WorksheetFunction オブジェクトの Replace メソッド
 の方を使うと良いのではないかと思います。が。。。?
  あ、seiyaさんご提示のコードの中で使って有りますね。

 (HANA)

充分な知識のないまま、わかりにくいサンプルにて投稿してスミマセン。

seiyaさんのコードとあわせて、確認してみます。
ご迷惑おかけしました。

(アロハー)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.