[[20100724151753]] 『1+1を2と認識する方法』(カズ) ページの最後に飛ぶ

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

 

『1+1を2と認識する方法』(カズ)

Excel2007  WindowsXP  です。

      A          B          C

 1     2     600      1200 

 2    1+1     600      1200 

 3      2:2      600       2400

上記の様にA列に数量を入力し B列に値段を入れると
C列に合計が表示する様に作っていますが、

2列目とか3列目とかは、C列が計算されません。

A列に1+1 2:2とか入れても 2 と4と認識して

上記みたいにC列に合計が計算できる方法はありませんか?

ちなみに、見積り等で使っています。
よろしくお願いします。


 >1+1 2:2とか入れても 2 と4と認識して

 その2つの記号で全種類なのですか?

 (半平太) 2010/07/24 16:15

 これを応用すれば出来ると思います。
  ↓
[[20100531103849]]『セルに入力した四則演算("+","-","*","/")を使って別のセルで+計算をさせたい』

 注: 「:」を 「+」 に置き換えるのはSubstitute() で。

 (半平太) 2010/07/24 16:19

半平太 さん

カズです。

現在のところ 1+1 とか 1:1 とか 1対1とかです


 ユーザー定義関数を作ってしまえばよいと思いますけどね!!

 仕様は、

 関数名     editcalc

 機能       指定された計算式を編集し、その結果を評価する

 呼び出し形式
            editcalc(calcstr[,eddatalist])

 引数説明
            calcstr   -----  編集対象となる文字列を指定します
            eddatalist 
            calcstr内の文字列の eddatalist(n,1)をeddatalist(n,2)
            に置き換えて評価する
            eddlistは、eddatalist(n,1)とeddatalist(n,2)の一対で使用すること
            calcstrに変更がなければこの引数は必要ない
 使用例
            calcstr="5×2÷4" のとき
            editcalc(calcstr,{"×","*";"÷","/"}) で、2.5と評価される

            セルA1に "2:2"   b1に 600 とあるときに
            =editcalc(A1,{":","+"})*B1   とう数式は、2400と評価されます。

 標準モジュールに

 '======================================================================
 Function editcalc(ByVal calcstr As Variant, Optional ByVal eddata As Variant) As Variant
    Dim g0 As Long
    Dim wk As Long
    Dim ans  As Variant
    On Error Resume Next
    If Not IsMissing(eddata) Then
       ans = eddata
       wk = LBound(ans, 2)
       If Err.Number <> 0 Then
          ReDim ans(1 To 1, 1 To 2)
          ans(1, 1) = eddata(LBound(eddata))
          ans(1, 2) = eddata(LBound(eddata) + 1)
       End If
       For g0 = LBound(ans, 1) To UBound(ans, 1)
          calcstr = Replace(calcstr, ans(g0, LBound(ans, 2)), ans(g0, LBound(ans, 2) + 1))
       Next
     End If
     editcalc = Application.Evaluate("=" & calcstr)
     On Error GoTo 0
 End Function

 これを今回の事象に使うことを考えると、C列に

 =editcalc(A1,{":","+";"対","+"})*B1

 こんな数式で処理できると思います。

 仮に "2と3" は 5 と評価したい なんて仕様が追加されたら、数式を

 =editcalc(A1,{":","+";"対","+";"と","+"})*B1

 このように変更すればよいという仕様です。

 もっとも、仕様追加で数式の変更も必要になるので、
 {":","+";"対","+";"と","+"} ここを名前の定義で 変換リスト という名前で
 登録すれば、

 数式は、

 =editcalc(a1,変換リスト)

 ですみますし、仕様の追加・変更は、変換リストで行い、数式の変更が要りません。
 また、eddatalistには、例えば、h1:i3なんていうセル範囲も指定できます

   h  i

 1   :    +
 2 対    +
 3  と    +

  =editcalc(A1,$H$1:$I$3)*B1  

      

 VBAを知っているなら、試してみてください。

 ichinose         

    


ichinose さん

ありがとうございました。
うまくいきました。


コメント返信:

[ 一覧(最新更新順) ]


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